If we have a monmap with dummy addrs for initial members, and we probe one
of those peers and learn their address, update our monmap appropriately.
Signed-off-by: Sage Weil <sage@inktank.com>
assert(m < rank_addr.size());
return rank_addr[m];
}
+ void set_addr(const string& n, entity_addr_t a) {
+ assert(mon_addr.count(n));
+ mon_addr[n] = a;
+ calc_ranks();
+ }
entity_inst_t get_inst(const string& n) {
assert(mon_addr.count(n));
int m = get_rank(n);
monmap->rename(peer_name, m->name);
}
+ // new initial peer?
+ if (monmap->contains(m->name)) {
+ entity_addr_t a = monmap->get_addr(m->name);
+ a.set_port(0);
+ entity_addr_t b;
+ b.set_family(AF_INET);
+ dout(1) << " a " << a <<" b " << b << dendl;
+ if (a == b) {
+ 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;
+ }
+ }
+
// is there an existing quorum?
if (m->quorum.size()) {
dout(10) << " existing quorum " << m->quorum << dendl;