From: Sage Weil Date: Tue, 6 Nov 2018 23:22:03 +0000 (-0600) Subject: mon/MonMap: allow v1 or v2 to be explicitly specified along with part X-Git-Tag: v14.1.0~484^2~80 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d16f6e4654164fcb7791c4df802d4bce5750b420;p=ceph-ci.git mon/MonMap: allow v1 or v2 to be explicitly specified along with part If there is a v1: or v2: prefix, that's the protocol/addr type. Otherwise, we assume msgr2. Signed-off-by: Sage Weil --- diff --git a/src/mon/MonMap.cc b/src/mon/MonMap.cc index 505fb31a65d..afeb5b843b2 100644 --- a/src/mon/MonMap.cc +++ b/src/mon/MonMap.cc @@ -347,29 +347,52 @@ void MonMap::_add_ambiguous_addr(const string& name, entity_addr_t addr, int priority) { - if (addr.get_port() == 0) { - // no port; try both msgr2 and legacy - 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 if (addr.get_port() == CEPH_MON_PORT_LEGACY) { - // legacy port implies legacy addr - addr.set_type(entity_addr_t::TYPE_LEGACY); - if (!contains(addr)) { - add(name + "-legacy", entity_addrvec_t(addr)); + if (addr.get_type() != entity_addr_t::TYPE_V1ORV2) { + // a v1: or v2: prefix was specified + if (addr.get_port() == 0) { + // use default port + if (addr.get_type() == entity_addr_t::TYPE_MSGR2) { + 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 { + // wth + return; + } + if (!contains(addr)) { + add(name, entity_addrvec_t(addr)); + } + } else { + if (!contains(addr)) { + add(name, entity_addrvec_t(addr), priority); + } } } else { - // assume msgr2 - addr.set_type(entity_addr_t::TYPE_MSGR2); - if (!contains(addr)) { - add(name, entity_addrvec_t(addr), priority); + // no v1: or v2: prefix specified + if (addr.get_port() == 0) { + // no port; try both msgr2 and legacy + 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 if (addr.get_port() == CEPH_MON_PORT_LEGACY) { + // legacy port implies legacy addr + addr.set_type(entity_addr_t::TYPE_LEGACY); + if (!contains(addr)) { + add(name + "-legacy", entity_addrvec_t(addr)); + } + } else { + // assume msgr2 + addr.set_type(entity_addr_t::TYPE_MSGR2); + if (!contains(addr)) { + add(name, entity_addrvec_t(addr), priority); + } } } } @@ -378,7 +401,7 @@ int MonMap::init_with_ips(const std::string& ips, const std::string &prefix) { vector addrs; - if (!parse_ip_port_vec(ips.c_str(), addrs)) { + if (!parse_ip_port_vec(ips.c_str(), addrs, entity_addr_t::TYPE_V1ORV2)) { return -EINVAL; } if (addrs.empty()) @@ -403,7 +426,7 @@ int MonMap::init_with_hosts(const std::string& hostlist, return -EINVAL; vector addrs; - bool success = parse_ip_port_vec(hosts, addrs); + bool success = parse_ip_port_vec(hosts, addrs, entity_addr_t::TYPE_V1ORV2); free(hosts); if (!success) return -EINVAL;