summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mon/Monitor.cc15
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()) {