From: Radosław Zarzyński Date: Tue, 7 Mar 2023 12:30:11 +0000 (+0100) Subject: osd: don't send stale hb msgr's addresses in MOSDBoot X-Git-Tag: v19.3.0~31^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=81944f60478abe2d4253caaeb4165da5ccffaca1;p=ceph-ci.git osd: don't send stale hb msgr's addresses in MOSDBoot 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 --- diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 7ab35bf0e08..f26e87fa00e 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -6742,13 +6742,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 " @@ -6763,7 +6761,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); @@ -6773,7 +6770,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); @@ -6784,6 +6780,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,