From fa6bdea4ed55afcfe0d994ef196cce65ec4fb10a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rados=C5=82aw=20Zarzy=C5=84ski?= Date: Tue, 7 Mar 2023 13:30:11 +0100 Subject: [PATCH] osd: don't send stale hb msgr's addresses in MOSDBoot MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit See comments in the ticket for the RCA. NOTE: we can't just hold a reference to what `get_myaddrs()` returns as the `safe_item_history` is involved: ```cpp template class safe_item_history { //... T *current = nullptr; // ... const T& operator=(const T& other) { std::lock_guard l(lock); history.push_back(other); current = &history.back(); return *current; } ``` Fixes: https://tracker.ceph.com/issues/58915 Signed-off-by: Radosław Zarzyński (cherry picked from commit 81944f60478abe2d4253caaeb4165da5ccffaca1) --- src/osd/OSD.cc | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 3d67bcdb99cd1..1be25c3196c4a 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -6973,13 +6973,11 @@ void OSD::_send_boot() cluster_messenger->get_loopback_connection().get(); entity_addrvec_t client_addrs = client_messenger->get_myaddrs(); entity_addrvec_t cluster_addrs = cluster_messenger->get_myaddrs(); - entity_addrvec_t hb_back_addrs = hb_back_server_messenger->get_myaddrs(); - entity_addrvec_t hb_front_addrs = hb_front_server_messenger->get_myaddrs(); dout(20) << " initial client_addrs " << client_addrs << ", cluster_addrs " << cluster_addrs - << ", hb_back_addrs " << hb_back_addrs - << ", hb_front_addrs " << hb_front_addrs + << ", hb_back_addrs " << hb_back_server_messenger->get_myaddrs() + << ", hb_front_addrs " << hb_front_server_messenger->get_myaddrs() << dendl; if (cluster_messenger->set_addr_unknowns(client_addrs)) { dout(10) << " assuming cluster_addrs match client_addrs " @@ -6994,7 +6992,6 @@ void OSD::_send_boot() if (hb_back_server_messenger->set_addr_unknowns(cluster_addrs)) { dout(10) << " assuming hb_back_addrs match cluster_addrs " << cluster_addrs << dendl; - hb_back_addrs = hb_back_server_messenger->get_myaddrs(); } if (auto session = local_connection->get_priv(); !session) { hb_back_server_messenger->ms_deliver_handle_fast_connect(local_connection); @@ -7004,7 +7001,6 @@ void OSD::_send_boot() if (hb_front_server_messenger->set_addr_unknowns(client_addrs)) { dout(10) << " assuming hb_front_addrs match client_addrs " << client_addrs << dendl; - hb_front_addrs = hb_front_server_messenger->get_myaddrs(); } if (auto session = local_connection->get_priv(); !session) { hb_front_server_messenger->ms_deliver_handle_fast_connect(local_connection); @@ -7015,6 +7011,8 @@ void OSD::_send_boot() // are, so now is a good time! set_numa_affinity(); + entity_addrvec_t hb_back_addrs = hb_back_server_messenger->get_myaddrs(); + entity_addrvec_t hb_front_addrs = hb_front_server_messenger->get_myaddrs(); MOSDBoot *mboot = new MOSDBoot( superblock, get_osdmap_epoch(), service.get_boot_epoch(), hb_back_addrs, hb_front_addrs, cluster_addrs, -- 2.39.5