]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: only learn peer addresses when monmap == 0
authorSage Weil <sage@inktank.com>
Fri, 14 Feb 2014 19:13:26 +0000 (11:13 -0800)
committerJoao Eduardo Luis <jecluis@gmail.com>
Mon, 17 Mar 2014 15:10:04 +0000 (15:10 +0000)
It is only safe to dynamically update the address for a peer mon in our
monmap if we are in the midst of the initial quorum formation (i.e.,
monmap.epoch == 0).  If it is a later epoch, we have formed our initial
quorum and any and all monmap changes need to be agreed upon by the quorum
and committed via paxos.

Fixes: #7212
Signed-off-by: Sage Weil <sage@inktank.com>
(cherry picked from commit 7bd2104acfeff0c9aa5e648d82ed372f901f767f)

src/mon/Monitor.cc

index 1964656d03733a758d57515d1913387cb5e57e06..f29af78fd6f24de8ddb3d8310ac2cac6cbf332b6 100644 (file)
@@ -1341,15 +1341,15 @@ void Monitor::handle_probe_reply(MMonProbe *m)
   }
 
   // new initial peer?
-  if (monmap->contains(m->name)) {
-    if (monmap->get_addr(m->name).is_blank_ip()) {
-      dout(1) << " learned initial mon " << m->name << " addr " << m->get_source_addr() << dendl;
-      monmap->set_addr(m->name, m->get_source_addr());
-      m->put();
+  if (monmap->get_epoch() == 0 &&
+      monmap->contains(m->name) &&
+      monmap->get_addr(m->name).is_blank_ip()) {
+    dout(1) << " learned initial mon " << m->name << " addr " << m->get_source_addr() << dendl;
+    monmap->set_addr(m->name, m->get_source_addr());
+    m->put();
 
-      bootstrap();
-      return;
-    }
+    bootstrap();
+    return;
   }
 
   // end discover phase