summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2013-06-06 15:20:05 -0700
committerSage Weil <sage@inktank.com>2013-06-17 14:24:45 -0700
commitb2703c521553bcfd43dd4e57824e3e167d3ed7f9 (patch)
treec979195ffcd31f23d11c1e83f1f7465b2060626e
parent4a454b0b933604f258a9a1c3b5b59208c094cf98 (diff)
downloadceph-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.h23
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);
}
/**