diff options
author | Sage Weil <sage@inktank.com> | 2013-06-06 15:20:05 -0700 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-06-17 14:24:45 -0700 |
commit | b2703c521553bcfd43dd4e57824e3e167d3ed7f9 (patch) | |
tree | c979195ffcd31f23d11c1e83f1f7465b2060626e | |
parent | 4a454b0b933604f258a9a1c3b5b59208c094cf98 (diff) | |
download | ceph-b2703c521553bcfd43dd4e57824e3e167d3ed7f9.tar.gz |
mon/PaxosService: simplify is_writeable
Recast this in terms of paxos check + our conditions, and make it
match wait_for_writeable().
Signed-off-by: Sage Weil <sage@inktank.com>
-rw-r--r-- | src/mon/PaxosService.h | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/src/mon/PaxosService.h b/src/mon/PaxosService.h index dbe37434a71..2fd7515c323 100644 --- a/src/mon/PaxosService.h +++ b/src/mon/PaxosService.h @@ -545,19 +545,16 @@ public: * We consider to be writeable iff: * * - we are not proposing a new version; - * - our monitor is the leader; - * - we have a valid lease; - * - Paxos is not boostrapping. - * - Paxos is not recovering. * - we are ready to be written to -- i.e., we have a pending value. + * - paxos is writeable * * @returns true if writeable; false otherwise */ bool is_writeable() { - return (is_active() - && mon->is_leader() - && paxos->is_lease_valid() - && is_write_ready()); + return + !is_proposing() && + is_write_ready() && + paxos->is_writeable(); } /** @@ -621,12 +618,12 @@ public: * @param c The callback to be awaken once we become writeable. */ void wait_for_writeable(Context *c) { - if (!is_proposing()) { + if (is_proposing()) + wait_for_finished_proposal(c); + else if (!is_write_ready()) + wait_for_active(c); + else paxos->wait_for_writeable(c); - return; - } - - wait_for_finished_proposal(c); } /** |