From: Sage Weil Date: Fri, 14 Feb 2014 19:13:26 +0000 (-0800) Subject: mon: only learn peer addresses when monmap == 0 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=1996fd89fb3165a63449b135e05841579695aabd;p=ceph.git mon: only learn peer addresses when monmap == 0 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 (cherry picked from commit 7bd2104acfeff0c9aa5e648d82ed372f901f767f) --- diff --git a/src/mon/Monitor.cc b/src/mon/Monitor.cc index 1964656d03733..f29af78fd6f24 100644 --- a/src/mon/Monitor.cc +++ b/src/mon/Monitor.cc @@ -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