From: Radosław Zarzyński Date: Fri, 3 Feb 2023 22:12:28 +0000 (+0100) Subject: osd: OSD's public messenger respects public_bind_addrs X-Git-Tag: v17.2.6~31^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=bb9eb6aa2f166bc51ec23fddd3d4d67e2258c47e;p=ceph.git osd: OSD's public messenger respects public_bind_addrs Fixes: https://tracker.ceph.com/issues/58779 Signed-off-by: Radosław Zarzyński (cherry picked from commit b207f9b036c25b7b6e1a687d5ff6de4575b84b2e) --- diff --git a/src/ceph_osd.cc b/src/ceph_osd.cc index b10c799b4a3b..1c15dfff5477 100644 --- a/src/ceph_osd.cc +++ b/src/ceph_osd.cc @@ -605,12 +605,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); @@ -619,8 +633,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); @@ -633,7 +649,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); }