]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/net: set peer_addr in server_reconnect()
authorYingxin Cheng <yingxin.cheng@intel.com>
Mon, 26 Aug 2019 05:15:16 +0000 (13:15 +0800)
committerYingxin Cheng <yingxin.cheng@intel.com>
Wed, 28 Aug 2019 02:16:39 +0000 (10:16 +0800)
Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
src/crimson/net/ProtocolV2.cc

index 270be91132ed690718f05658500e884c30fc7205..fdd45a0ac19ec77c97d49e48049a207329f1d513 100644 (file)
@@ -1344,10 +1344,20 @@ ProtocolV2::server_reconnect()
 
     // can peer_addrs be changed on-the-fly?
     // TODO: change peer_addr to entity_addrvec_t
-    if (conn.peer_addr != reconnect.addrs().front()) {
+    entity_addr_t paddr = reconnect.addrs().front();
+    if (paddr.is_msgr2() || paddr.is_any()) {
+      // good
+    } else {
+      logger().warn("{} peer's address {} is not v2", conn, paddr);
+      throw std::system_error(
+          make_error_code(ceph::net::error::bad_peer_address));
+    }
+    if (conn.peer_addr == entity_addr_t()) {
+      conn.peer_addr = paddr;
+    } else if (conn.peer_addr != paddr) {
       logger().error("{} peer identifies as {}, while conn.peer_addr={},"
                      " reconnect failed",
-                     conn, reconnect.addrs().front(), conn.peer_addr);
+                     conn, paddr, conn.peer_addr);
       throw std::system_error(
           make_error_code(ceph::net::error::bad_peer_address));
     }
@@ -1358,8 +1368,8 @@ ProtocolV2::server_reconnect()
     if (!existing_conn) {
       // there is no existing connection therefore cannot reconnect to previous
       // session
-      logger().warn("{} server_reconnect: no existing connection,"
-                    " reseting client", conn);
+      logger().warn("{} server_reconnect: no existing connection from address {},"
+                    " reseting client", conn, conn.peer_addr);
       return send_reset(true);
     }