]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: clean up recovered_leader() checks
authorSage Weil <sage@inktank.com>
Wed, 19 Sep 2012 21:34:56 +0000 (14:34 -0700)
committerSage Weil <sage@inktank.com>
Wed, 19 Sep 2012 21:34:56 +0000 (14:34 -0700)
Assert they are called only once per machine per election epoch.  Fix the
recovered_peon() caller to do that.

Signed-off-by: Sage Weil <sage@inktank.com>
src/mon/Monitor.cc
src/mon/Paxos.cc

index 724fda9d5c741270428dc5770ae025ddb7e83ca6..88f76c9e4bad7bedef1fc8f3ebd2af5eb0f164fb 100644 (file)
@@ -207,8 +207,7 @@ Monitor::~Monitor()
 
 void Monitor::recovered_leader(int id)
 {
-  if (paxos_recovered.count(id))
-    return;
+  assert(paxos_recovered.count(id) == 0);
   paxos_recovered.insert(id);
   if (paxos_recovered.size() == paxos.size()) {
     dout(10) << "all paxos instances recovered, going writeable" << dendl;
@@ -232,8 +231,7 @@ void Monitor::recovered_leader(int id)
 
 void Monitor::recovered_peon(int id)
 {
-  if (paxos_recovered.count(id))
-    return;
+  assert(paxos_recovered.count(id) == 0);
   paxos_recovered.insert(id);
   if (paxos_recovered.size() == paxos.size()) {
     dout(10) << "all paxos instances recovered/leased" << dendl;
index 4a2d1625bfe2bbdac7faf0bf69a1e1578be25450..0be63574530d6b4b5ba0e9411d876189e1b3b477 100644 (file)
@@ -679,7 +679,9 @@ void Paxos::handle_lease(MMonPaxos *lease)
   }
 
   state = STATE_ACTIVE;
-  mon->recovered_peon(machine_id);
+
+  if (!mon->is_all_paxos_recovered())
+    mon->recovered_peon(machine_id);
 
   dout(10) << "handle_lease on " << lease->last_committed
           << " now " << lease_expire << dendl;