// reasonably infer from the port number which it is).
void MonMap::_add_ambiguous_addr(const string& name,
entity_addr_t addr,
- int priority)
+ int priority,
+ bool for_mkfs)
{
if (addr.get_type() != entity_addr_t::TYPE_ANY) {
// a v1: or v2: prefix was specified
addr.set_port(CEPH_MON_PORT_IANA);
} else if (addr.get_type() == entity_addr_t::TYPE_LEGACY) {
addr.set_port(CEPH_MON_PORT_LEGACY);
+ } else if (addr.get_type() == entity_addr_t::TYPE_MSGR2) {
+ addr.set_port(CEPH_MON_PORT_IANA);
} else {
// wth
return;
// legacy port implies legacy addr
addr.set_type(entity_addr_t::TYPE_LEGACY);
if (!contains(addr)) {
- add(name + "-legacy", entity_addrvec_t(addr));
+ if (!for_mkfs) {
+ add(name + "-legacy", entity_addrvec_t(addr));
+ } else {
+ add(name, entity_addrvec_t(addr));
+ }
}
} else if (addr.get_port() == CEPH_MON_PORT_IANA) {
// iana port implies msgr2 addr
add(name, entity_addrvec_t(addr));
}
} else if (addr.get_port() == 0) {
- // no port; try both msgr2 and legacy ports
- addr.set_type(entity_addr_t::TYPE_MSGR2);
- addr.set_port(CEPH_MON_PORT_IANA);
- if (!contains(addr)) {
- add(name, entity_addrvec_t(addr));
- }
- addr.set_type(entity_addr_t::TYPE_LEGACY);
- addr.set_port(CEPH_MON_PORT_LEGACY);
- if (!contains(addr)) {
- add(name + "-legacy", entity_addrvec_t(addr));
+ // no port; include both msgr2 and legacy ports
+ if (!for_mkfs) {
+ addr.set_type(entity_addr_t::TYPE_MSGR2);
+ addr.set_port(CEPH_MON_PORT_IANA);
+ if (!contains(addr)) {
+ add(name, entity_addrvec_t(addr));
+ }
+ addr.set_type(entity_addr_t::TYPE_LEGACY);
+ addr.set_port(CEPH_MON_PORT_LEGACY);
+ if (!contains(addr)) {
+ add(name + "-legacy", entity_addrvec_t(addr));
+ }
+ } else {
+ entity_addrvec_t av;
+ addr.set_type(entity_addr_t::TYPE_MSGR2);
+ addr.set_port(CEPH_MON_PORT_IANA);
+ av.v.push_back(addr);
+ addr.set_type(entity_addr_t::TYPE_LEGACY);
+ addr.set_port(CEPH_MON_PORT_LEGACY);
+ av.v.push_back(addr);
+ if (!contains(av)) {
+ add(name, av);
+ }
}
} else {
- // try both msgr2 and legacy on specified port
addr.set_type(entity_addr_t::TYPE_MSGR2);
if (!contains(addr)) {
add(name, entity_addrvec_t(addr), priority);
}
- addr.set_type(entity_addr_t::TYPE_LEGACY);
- if (!contains(addr)) {
- add(name + "-legacy", entity_addrvec_t(addr), priority);
+ if (!for_mkfs) {
+ // try legacy on same port too
+ addr.set_type(entity_addr_t::TYPE_LEGACY);
+ if (!contains(addr)) {
+ add(name + "-legacy", entity_addrvec_t(addr), priority);
+ }
}
}
}
vector<entity_addr_t> addrs;
if (!parse_ip_port_vec(
ips.c_str(), addrs,
- for_mkfs ? entity_addr_t::TYPE_MSGR2 : entity_addr_t::TYPE_ANY)) {
+ entity_addr_t::TYPE_ANY)) {
return -EINVAL;
}
if (addrs.empty())
name = prefix;
}
name += n;
- _add_ambiguous_addr(name, addrs[i], 0);
+ _add_ambiguous_addr(name, addrs[i], 0, for_mkfs);
}
return 0;
}