]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/mgr: only pick the addr of the same type
authorKefu Chai <kchai@redhat.com>
Sat, 25 Jul 2020 05:04:58 +0000 (13:04 +0800)
committerKefu Chai <kchai@redhat.com>
Mon, 27 Jul 2020 03:29:10 +0000 (11:29 +0800)
to avoid the attempts to connect an OSD which is bound to a v2
address to a v1 address of a mgr.

in general, osd is bound to both v1 and v2 addresses, but crimson
msgr does not support multiple bound address at the time of writing, so
to avoid the failures when trying to connect to incompatible addresses,
let's filter out them when connecting to monitor. this change
silence warnings like:

peer_addr_for_me v1:172.21.15.106:60008/0 type doesn't match myaddr
v2:0.0.0.0:6802/26710

Signed-off-by: Kefu Chai <kchai@redhat.com>
src/crimson/mgr/client.cc

index c99a0c0f77c8d16693549ea03fcdfe8f2ea55c32..e8666139dd811adf74830d23b57d7a2a8a760e44 100644 (file)
@@ -103,7 +103,20 @@ seastar::future<> Client::reconnect()
   auto a_while = std::chrono::duration_cast<seastar::steady_clock_type::duration>(
     retry_interval);
   return seastar::sleep(a_while).then([this] {
-    auto peer = mgrmap.get_active_addrs().front();
+    auto peer = [&] {
+      auto& mgr_addrs = mgrmap.get_active_addrs();
+      if (msgr.get_myaddr().is_legacy()) {
+        return mgr_addrs.legacy_addr();
+      } else {
+        return mgr_addrs.msgr2_addr();
+      }
+    }();
+    if (peer == entity_addr_t{}) {
+      // crimson msgr only uses the first bound addr
+      logger().error("mgr.{} does not have an addr compatible with me",
+                     mgrmap.get_active_name());
+      return;
+    }
     conn = msgr.connect(peer, CEPH_ENTITY_TYPE_MGR);
   });
 }