From: Sage Weil Date: Sun, 30 Sep 2012 22:12:46 +0000 (-0700) Subject: mon: fix recovered_peon assert X-Git-Tag: v0.54~153 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=b8cbe26c5f97d32f517c8145aa14db6f13c9a178;p=ceph.git mon: fix recovered_peon assert Recovered_peon() can get called multiple times for a given machine id. Signed-off-by: Sage Weil --- diff --git a/src/mon/Monitor.cc b/src/mon/Monitor.cc index c145cef2ad649..57de1ca54cef7 100644 --- a/src/mon/Monitor.cc +++ b/src/mon/Monitor.cc @@ -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;