diff options
author | Sage Weil <sage@inktank.com> | 2013-06-04 17:03:15 -0700 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-06-17 14:24:45 -0700 |
commit | 4a454b0b933604f258a9a1c3b5b59208c094cf98 (patch) | |
tree | 867c4a9b683d2ec798714444d57fe37fb3114f3c | |
parent | 3901979b00c74d1d5a485e51ffac3017ed85b7a3 (diff) | |
download | ceph-4a454b0b933604f258a9a1c3b5b59208c094cf98.tar.gz |
mon/PaxosService: simplify readable check
Recast this in terms of the paxos check and our additional conditions,
which match wait_for_readable().
Signed-off-by: Sage Weil <sage@inktank.com>
-rw-r--r-- | src/mon/PaxosService.h | 25 |
1 files changed, 8 insertions, 17 deletions
diff --git a/src/mon/PaxosService.h b/src/mon/PaxosService.h index 4b0cb38b1ad..dbe37434a71 100644 --- a/src/mon/PaxosService.h +++ b/src/mon/PaxosService.h @@ -523,28 +523,19 @@ public: /** * Check if we are readable. * - * We consider that a given version @p ver is readable if: + * This mirrors on the paxos check, except that we also verify that * - * - it exists (i.e., is lower than the last committed version); - * - we have at least one committed version (i.e., last committed version - * is greater than zero); - * - our monitor is a member of the cluster (either a peon or the leader); - * - we are not proposing a new version; - * - the Paxos is not recovering; - * - we either belong to a quorum and have a valid lease, or we belong to - * a quorum of one. + * - the client hasn't seen the future relative to this PaxosService + * - this service isn't proposing. * * @param ver The version we want to check if is readable * @returns true if it is readable; false otherwise */ bool is_readable(version_t ver = 0) { - if ((ver > get_last_committed()) - || ((!mon->is_peon() && !mon->is_leader())) - || (is_proposing() || paxos->is_recovering() || paxos->is_locked()) - || (get_last_committed() <= 0) - || ((mon->get_quorum().size() != 1) && !paxos->is_lease_valid())) { + if (ver > get_last_committed() || + is_proposing() || + !paxos->is_readable(0)) return false; - } return true; } @@ -617,8 +608,8 @@ public: * Paxos; otherwise, we may assert on Paxos::wait_for_readable() if it * happens to be readable at that specific point in time. */ - if (is_proposing() || (ver > get_last_committed()) - || (get_last_committed() <= 0)) + if (is_proposing() || + ver > get_last_committed()) wait_for_finished_proposal(c); else paxos->wait_for_readable(c); |