From b207f9b036c25b7b6e1a687d5ff6de4575b84b2e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rados=C5=82aw=20Zarzy=C5=84ski?= Date: Fri, 3 Feb 2023 23:12:28 +0100 Subject: [PATCH] osd: OSD's public messenger respects public_bind_addrs MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Fixes: https://tracker.ceph.com/issues/58779 Signed-off-by: Radosław Zarzyński --- src/ceph_osd.cc | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/src/ceph_osd.cc b/src/ceph_osd.cc index a81322d00c7..6428a0ed522 100644 --- a/src/ceph_osd.cc +++ b/src/ceph_osd.cc @@ -614,12 +614,26 @@ flushjournal_out: ms_objecter->set_default_policy(Messenger::Policy::lossy_client(CEPH_FEATURE_OSDREPLYMUX)); - entity_addrvec_t public_addrs, cluster_addrs; + entity_addrvec_t public_addrs, public_bind_addrs, cluster_addrs; r = pick_addresses(g_ceph_context, CEPH_PICK_ADDRESS_PUBLIC, &public_addrs, iface_preferred_numa_node); if (r < 0) { derr << "Failed to pick public address." << dendl; forker.exit(1); + } else { + dout(10) << "picked public_addrs " << public_addrs << dendl; + } + r = pick_addresses(g_ceph_context, CEPH_PICK_ADDRESS_PUBLIC_BIND, + &public_bind_addrs, iface_preferred_numa_node); + if (r == -ENOENT) { + dout(10) << "there is no public_bind_addrs, defaulting to public_addrs" + << dendl; + public_bind_addrs = public_addrs; + } else if (r < 0) { + derr << "Failed to pick public bind address." << dendl; + forker.exit(1); + } else { + dout(10) << "picked public_bind_addrs " << public_bind_addrs << dendl; } r = pick_addresses(g_ceph_context, CEPH_PICK_ADDRESS_CLUSTER, &cluster_addrs, iface_preferred_numa_node); @@ -628,8 +642,10 @@ flushjournal_out: forker.exit(1); } - if (ms_public->bindv(public_addrs) < 0) + if (ms_public->bindv(public_bind_addrs, public_addrs) < 0) { + derr << "Failed to bind to " << public_bind_addrs << dendl; forker.exit(1); + } if (ms_cluster->bindv(cluster_addrs) < 0) forker.exit(1); @@ -642,7 +658,7 @@ flushjournal_out: ms_hb_front_server->set_socket_priority(SOCKET_PRIORITY_MIN_DELAY); } - entity_addrvec_t hb_front_addrs = public_addrs; + entity_addrvec_t hb_front_addrs = public_bind_addrs; for (auto& a : hb_front_addrs.v) { a.set_port(0); } -- 2.39.5