]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/net: do not reset need_addr before learning it 36268/head
authorKefu Chai <kchai@redhat.com>
Thu, 23 Jul 2020 16:09:08 +0000 (00:09 +0800)
committerKefu Chai <kchai@redhat.com>
Fri, 24 Jul 2020 10:15:12 +0000 (18:15 +0800)
because we don't bind both v1 and v2 addresses, when monitor returns a
v1 peer address, as the client side, crimson-osd just drops the
connection. but this failed attempt to learn the myaddr resets
`need_addr`. and this prevents crimson-osd from learning the v2 address
returned by monitor.

in this change, we reset need_addr only after it is learned from the
peer.

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

index f3d23f4aae6700a9c11634d4cddbe1405820f77e..7dc1e8969517ce43ebd503055e842a72919fe573 100644 (file)
@@ -199,13 +199,13 @@ seastar::future<> SocketMessenger::learned_addr(const entity_addr_t &peer_addr_f
     }
     return seastar::now();
   }
-  need_addr = false;
 
   if (get_myaddr().get_type() == entity_addr_t::TYPE_NONE) {
     // Not bound
     entity_addr_t addr = peer_addr_for_me;
     addr.set_type(entity_addr_t::TYPE_ANY);
     addr.set_port(0);
+    need_addr = false;
     return set_myaddrs(entity_addrvec_t{addr}
     ).then([this, &conn, peer_addr_for_me] {
       logger().info("{} learned myaddr={} (unbound) from {}",
@@ -230,6 +230,7 @@ seastar::future<> SocketMessenger::learned_addr(const entity_addr_t &peer_addr_f
       entity_addr_t addr = peer_addr_for_me;
       addr.set_type(get_myaddr().get_type());
       addr.set_port(get_myaddr().get_port());
+      need_addr = false;
       return set_myaddrs(entity_addrvec_t{addr}
       ).then([this, &conn, peer_addr_for_me] {
         logger().info("{} learned myaddr={} (blank IP) from {}",
@@ -241,6 +242,7 @@ seastar::future<> SocketMessenger::learned_addr(const entity_addr_t &peer_addr_f
       throw std::system_error(
           make_error_code(crimson::net::error::bad_peer_address));
     } else {
+      need_addr = false;
       return seastar::now();
     }
   }