]> git-server-git.apps.pok.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:43:52 +0000 (15:43 +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)
(cherry picked from commit 1996fd89fb3165a63449b135e05841579695aabd)

src/mon/Monitor.cc

index 119ca4b0761586101ab57ed4ea7a5d32a941dd3c..2f94837e23f74ed884419b4c674cc775a917fa04 100644 (file)
@@ -1338,15 +1338,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