]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
mon/MonMap: allow v1 or v2 to be explicitly specified along with part
authorSage Weil <sage@redhat.com>
Tue, 6 Nov 2018 23:22:03 +0000 (17:22 -0600)
committerSage Weil <sage@redhat.com>
Fri, 21 Dec 2018 21:31:32 +0000 (15:31 -0600)
If there is a v1: or v2: prefix, that's the protocol/addr type.  Otherwise,
we assume msgr2.

Signed-off-by: Sage Weil <sage@redhat.com>
src/mon/MonMap.cc

index 505fb31a65d9167a1a09c893bd832d31390c8457..afeb5b843b244701c0fe5305573bc651ba5b058e 100644 (file)
@@ -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<entity_addr_t> 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<entity_addr_t> 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;