diff options
Diffstat (limited to 'src/mon/Monitor.cc')
-rw-r--r-- | src/mon/Monitor.cc | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/mon/Monitor.cc b/src/mon/Monitor.cc index 601cdbab47b..74330d11e3c 100644 --- a/src/mon/Monitor.cc +++ b/src/mon/Monitor.cc @@ -1292,7 +1292,8 @@ void Monitor::handle_probe_reply(MMonProbe *m) dout(10) << "handle_probe_reply " << m->get_source_inst() << *m << dendl; dout(10) << " monmap is " << *monmap << dendl; - if (!is_probing()) { + // discover name and addrs during probing or electing states. + if (!is_probing() && !is_electing()) { m->put(); return; } @@ -1326,6 +1327,12 @@ void Monitor::handle_probe_reply(MMonProbe *m) << peer_name << " -> " << m->name << " in my monmap" << dendl; monmap->rename(peer_name, m->name); + + if (is_electing()) { + m->put(); + bootstrap(); + return; + } } else { dout(10) << " peer name is " << peer_name << dendl; } @@ -1342,6 +1349,12 @@ void Monitor::handle_probe_reply(MMonProbe *m) } } + // end discover phase + if (!is_probing()) { + m->put(); + return; + } + assert(paxos != NULL); if (is_synchronizing()) { |