From bee5046333a599291a1a87249d15a815e1eea2dc Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 18 Mar 2013 23:09:51 -0700 Subject: [PATCH] mon/PaxosService: handle non-zero return values 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 --- src/mon/PaxosService.h | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/mon/PaxosService.h b/src/mon/PaxosService.h index 30a7b6dfe51..cc403574df8 100644 --- a/src/mon/PaxosService.h +++ b/src/mon/PaxosService.h @@ -105,11 +105,12 @@ protected: 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"); } }; @@ -140,10 +141,13 @@ protected: 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"); } }; @@ -163,7 +167,12 @@ protected: 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"); } }; /**