If
7aec13f749035b9bef5e398c1ac3d56ceec8eb81 we started passing non-zero
return values to these completions; now we have to deal with them
accordingly.
RetryMessage behaves just like the Monitor variant.
Propose and Committed update state but otherwise ignore non-zero
return values.
Signed-off-by: Sage Weil <sage@inktank.com>
public:
C_RetryMessage(PaxosService *s, PaxosServiceMessage *m_) : svc(s), m(m_) {}
void finish(int r) {
- if (r == -ECANCELED) {
+ if (r == -EAGAIN || r >= 0)
+ svc->dispatch(m);
+ else if (r == -ECANCELED)
m->put();
- return;
- }
- svc->dispatch(m);
+ else
+ assert(0 == "bad C_RetryMessage return value");
}
};
public:
C_Propose(PaxosService *p) : ps(p) { }
void finish(int r) {
- if (r == -ECANCELED)
- return;
ps->proposal_timer = 0;
- ps->propose_pending();
+ if (r >= 0)
+ ps->propose_pending();
+ else if (r == -ECANCELED || r == -EAGAIN)
+ return;
+ else
+ assert(0 == "bad return value for C_Propose");
}
};
C_Committed(PaxosService *p) : ps(p) { }
void finish(int r) {
ps->proposing.set(0);
- ps->_active();
+ if (r >= 0)
+ ps->_active();
+ else if (r == -ECANCELED || r == -EAGAIN)
+ return;
+ else
+ assert(0 == "bad return value for C_Committed");
}
};
/**