From 35745cba8985c5f3238e3c28fd28b194fae043d9 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 4 Jun 2013 17:03:15 -0700 Subject: [PATCH] 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 (cherry picked from commit 3aa61a0beb540e48bf61ceded766d6ff52c95eb2) --- src/mon/PaxosService.h | 25 ++++++++----------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/src/mon/PaxosService.h b/src/mon/PaxosService.h index 6e57831095e89..decd046f633e5 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); -- 2.39.5