From: Kefu Chai Date: Fri, 15 Feb 2019 17:02:18 +0000 (+0800) Subject: crimson/osd: send known addresses in MOSDBoot X-Git-Tag: v14.1.0~61^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=30a93047cb7d335900996a9ab13d3152aa9a4402;p=ceph-ci.git crimson/osd: send known addresses in MOSDBoot otherwise, the peers will drop the connection at seeing unmatched address in banner. Signed-off-by: Kefu Chai --- diff --git a/src/crimson/osd/osd.cc b/src/crimson/osd/osd.cc index 3534b733b73..3133b591ca4 100644 --- a/src/crimson/osd/osd.cc +++ b/src/crimson/osd/osd.cc @@ -116,6 +116,33 @@ namespace { } return addrs; } + std::pair + replace_unknown_addrs(entity_addrvec_t maybe_unknowns, + const entity_addrvec_t& knowns) { + bool changed = false; + auto maybe_replace = [&](entity_addr_t addr) { + if (!addr.is_blank_ip()) { + return addr; + } + for (auto& b : knowns.v) { + if (addr.get_family() == b.get_family()) { + auto a = b; + a.set_nonce(addr.get_nonce()); + a.set_type(addr.get_type()); + a.set_port(addr.get_port()); + changed = true; + return a; + } + } + throw std::runtime_error("failed to replace unknown address"); + }; + entity_addrvec_t replaced; + std::transform(maybe_unknowns.v.begin(), + maybe_unknowns.v.end(), + std::back_inserter(replaced.v), + maybe_replace); + return {replaced, changed}; + } } seastar::future<> OSD::start() @@ -179,6 +206,11 @@ seastar::future<> OSD::start() monc->sub_want("osdmap", 0, 0); return monc->renew_subs(); }).then([this] { + if (auto [addrs, changed] = + replace_unknown_addrs(cluster_msgr->get_myaddrs(), + public_msgr->get_myaddrs()); changed) { + cluster_msgr->set_myaddrs(addrs); + } return heartbeat->start(public_msgr->get_myaddrs(), cluster_msgr->get_myaddrs()); }).then([this] {