]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
msg/async/ProtocolV2: be flexible with server identity check
authorSage Weil <sage@redhat.com>
Fri, 30 Nov 2018 16:28:56 +0000 (10:28 -0600)
committerSage Weil <sage@redhat.com>
Fri, 21 Dec 2018 21:31:32 +0000 (15:31 -0600)
Signed-off-by: Sage Weil <sage@redhat.com>
src/msg/async/ProtocolV2.cc

index 77c6f4ec26aa3fab056d469ed14990b482c80adf..aefbefb86e00fb0d0458ef246371e8bbb5875626 100644 (file)
@@ -1365,26 +1365,24 @@ CtPtr ProtocolV2::handle_server_addrvec_and_identify(char *buffer, int r) {
     lderr(cct) << __func__ << " decode peer addr failed " << dendl;
     return _fault();
   }
-  ldout(cct, 20) << __func__ << " connect read peer addr " << peer_addr
+  ldout(cct, 20) << __func__ << " read peer addr " << peer_addr
                 << " of " << paddrs
                  << " on socket " << connection->cs.fd() << dendl;
 
-  if (peer_addr != connection->peer_addrs.msgr2_addr()) {
-    ldout(cct, 10) << __func__ << " connect claims to be " << peer_addr
-                  << " not "
-                   << connection->peer_addrs.msgr2_addr() << dendl;
-    return _fault();
-  }
-  if (paddrs != connection->peer_addrs) {
-    ldout(cct, 10) << __func__ << " connect claims to be " << paddrs
-                  << " not "
+  // Be somewhat flexible with our identity check.  In particular, we
+  // may be trying to connect to a v2 addr, and the remote may
+  // identify themselves by several other addrs as well.  This happens
+  // with mon discovery.
+  if (!connection->peer_addrs.contains(peer_addr)) {
+    ldout(cct, 10) << __func__ << " server claims to be " << peer_addr
+                  << " (of " << paddrs << "), but we are trying to reach "
                    << connection->peer_addrs << dendl;
     return _fault();
   }
 
   connection->set_peer_addrs(paddrs);
 
-  ldout(cct, 20) << __func__ << " connect peer addr for me is "
+  ldout(cct, 20) << __func__ << " peer addr for me is "
                  << peer_addr_for_me << dendl;
   connection->lock.unlock();
   bool learned = messenger->learned_addr(peer_addr_for_me);