From: Sage Weil Date: Wed, 6 Feb 2019 12:23:16 +0000 (-0600) Subject: msg/{async,simple}: make learned_addr a bit smarter X-Git-Tag: v14.1.0~184^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=80cc838b7bdfd654d35a5409b5b54c6318d5db5f;p=ceph.git msg/{async,simple}: make learned_addr a bit smarter Only set type ANY if we are a pure client; otherwise, preserve the type. Also, only populate the addr if we have a blank ip (sometimes we already know it from learn_addr_unknowns). Signed-off-by: Sage Weil --- diff --git a/src/msg/async/AsyncMessenger.cc b/src/msg/async/AsyncMessenger.cc index 72423f8087c7..f6bcaa9b794e 100644 --- a/src/msg/async/AsyncMessenger.cc +++ b/src/msg/async/AsyncMessenger.cc @@ -899,12 +899,14 @@ bool AsyncMessenger::learned_addr(const entity_addr_t &peer_addr_for_me) // fix all addrs of the same family, regardless of type (msgr2 vs legacy) entity_addrvec_t newaddrs = *my_addrs; for (auto& a : newaddrs.v) { - if (a.get_family() == peer_addr_for_me.get_family()) { + if (a.is_blank_ip() && + a.get_family() == peer_addr_for_me.get_family()) { entity_addr_t t = peer_addr_for_me; - t.set_type(a.get_type()); if (!did_bind) { + t.set_type(entity_addr_t::TYPE_ANY); t.set_port(0); } else { + t.set_type(a.get_type()); t.set_port(a.get_port()); } t.set_nonce(a.get_nonce()); diff --git a/src/msg/simple/SimpleMessenger.cc b/src/msg/simple/SimpleMessenger.cc index 39f159df9df7..09d1ab7b2a24 100644 --- a/src/msg/simple/SimpleMessenger.cc +++ b/src/msg/simple/SimpleMessenger.cc @@ -740,10 +740,15 @@ void SimpleMessenger::learned_addr(const entity_addr_t &peer_addr_for_me) return; lock.Lock(); - if (need_addr) { + if (need_addr && my_addr.is_blank_ip()) { entity_addr_t t = peer_addr_for_me; - t.set_type(entity_addr_t::TYPE_ANY); - t.set_port(my_addr.get_port()); + if (!did_bind) { + t.set_type(entity_addr_t::TYPE_ANY); + t.set_port(0); + } else { + t.set_type(entity_addr_t::TYPE_LEGACY); + t.set_port(my_addr.get_port()); + } t.set_nonce(my_addr.get_nonce()); ANNOTATE_BENIGN_RACE_SIZED(&my_addr, sizeof(my_addr), "SimpleMessenger learned addr");