]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon/MonMap: improve/fix initial monmap generation for mkfs
authorSage Weil <sage@redhat.com>
Wed, 9 Jan 2019 20:11:10 +0000 (14:11 -0600)
committerSage Weil <sage@redhat.com>
Fri, 11 Jan 2019 01:00:39 +0000 (19:00 -0600)
The monmap generation from mon_host for mon mkfs was pretty much completely
broken.  Restructure the code.

Generally, prefer v2+v1 addrvecs, unless a specific addr type and/or
port is specified.

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

index 372d0161b4a9354aa6665c7bd106b233462abee9..50ad0403d1773fd45db01845d5620c6e9f7f7d41 100644 (file)
@@ -346,7 +346,8 @@ void MonMap::dump(Formatter *f) const
 // 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
@@ -356,6 +357,8 @@ void MonMap::_add_ambiguous_addr(const string& name,
        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;
@@ -374,7 +377,11 @@ void MonMap::_add_ambiguous_addr(const string& name,
       // 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
@@ -383,26 +390,41 @@ void MonMap::_add_ambiguous_addr(const string& name,
        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);
+       }
       }
     }
   }
@@ -415,7 +437,7 @@ int MonMap::init_with_ips(const std::string& ips,
   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())
@@ -429,7 +451,7 @@ int MonMap::init_with_ips(const std::string& ips,
       name = prefix;
     }
     name += n;
-    _add_ambiguous_addr(name, addrs[i], 0);
+    _add_ambiguous_addr(name, addrs[i], 0, for_mkfs);
   }
   return 0;
 }
index addd7a1c4fbc7d663217ac8260175e7e52cee574..d376a12068cc6cae37c2d6dead142968f04a9129 100644 (file)
@@ -133,7 +133,8 @@ class MonMap {
 
   void _add_ambiguous_addr(const string& name,
                           entity_addr_t addr,
-                          int priority);
+                          int priority,
+                          bool for_mkfs=false);
 
 public:
   void calc_legacy_ranks();