]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: OSD's public messenger respects public_bind_addrs 50153/head
authorRadosław Zarzyński <rzarzyns@redhat.com>
Fri, 3 Feb 2023 22:12:28 +0000 (23:12 +0100)
committerRadosław Zarzyński <rzarzyns@redhat.com>
Mon, 20 Feb 2023 12:29:07 +0000 (13:29 +0100)
Fixes: https://tracker.ceph.com/issues/58779
Signed-off-by: Radosław Zarzyński <rzarzyns@redhat.com>
(cherry picked from commit b207f9b036c25b7b6e1a687d5ff6de4575b84b2e)

src/ceph_osd.cc

index b10c799b4a3bb9263c4ad13dde095ba4a0571df4..1c15dfff5477c0b02a493e179996440ec973fd48 100644 (file)
@@ -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);
   }