]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: fix recovered_peon assert
authorSage Weil <sage@inktank.com>
Sun, 30 Sep 2012 22:12:46 +0000 (15:12 -0700)
committerSage Weil <sage@inktank.com>
Sun, 30 Sep 2012 22:12:59 +0000 (15:12 -0700)
Recovered_peon() can get called multiple times for a given machine id.

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

index c145cef2ad6496b0fe21e10f79cd105f82d49f13..57de1ca54cef7186de6786aeb92bf00eb892f2eb 100644 (file)
@@ -232,8 +232,13 @@ void Monitor::recovered_leader(int id)
 
 void Monitor::recovered_peon(int id)
 {
+  // unlike recovered_leader(), recovered_peon() can get called
+  // multiple times, because it is triggered by a paxos lease message,
+  // and the leader may send multiples of those out for a given paxos
+  // machine while it is waiting for another instance to recover.
+  if (paxos_recovered.count(id))
+    return;
   dout(10) << "recovered_peon " << id << " " << get_paxos_name(id) << " (" << paxos_recovered << ")" << dendl;
-  assert(paxos_recovered.count(id) == 0);
   paxos_recovered.insert(id);
   if (paxos_recovered.size() == paxos.size()) {
     dout(10) << "all paxos instances recovered/leased" << dendl;