]> 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)
committerSage Weil <sage@inktank.com>
Sat, 15 Feb 2014 04:27:44 +0000 (20:27 -0800)
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>
src/mon/Monitor.cc

index 35d880c4559c0cf18a41185803d97b419bb35117..68239e808d6d4b7c918e2e3b013c0e0c32d2a729 100644 (file)
@@ -1388,15 +1388,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