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)
}
// 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