]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
msg: make set_addr_unknowns take an addrvec
authorSage Weil <sage@redhat.com>
Tue, 12 Jun 2018 16:44:16 +0000 (11:44 -0500)
committerSage Weil <sage@redhat.com>
Tue, 3 Jul 2018 18:01:24 +0000 (13:01 -0500)
Nicely collapse the wonky logic in OSD into the helper!

Signed-off-by: Sage Weil <sage@redhat.com>
src/mgr/DaemonServer.cc
src/msg/Messenger.h
src/msg/async/AsyncMessenger.cc
src/msg/async/AsyncMessenger.h
src/msg/simple/SimpleMessenger.cc
src/msg/simple/SimpleMessenger.h
src/msg/xio/XioMessenger.h
src/osd/OSD.cc

index f7feae2ea209c4fee6a30fbde829f86eb388c8d2..257177ea156369b1c90e8cd3081e334eb94f0401 100644 (file)
@@ -134,7 +134,7 @@ int DaemonServer::init(uint64_t gid, entity_addr_t client_addr)
   }
 
   msgr->set_myname(entity_name_t::MGR(gid));
-  msgr->set_addr_unknowns(client_addr);
+  msgr->set_addr_unknowns(entity_addrvec_t(client_addr));
 
   msgr->start();
   msgr->add_dispatcher_tail(this);
index a83d86746514b3b9e464555a14503162bb1f213d..9f8937e6b3256619f7413f323801a6d76c1c469e 100644 (file)
@@ -197,7 +197,7 @@ public:
    *
    * @param addr The address to use as a template.
    */
-  virtual void set_addr_unknowns(const entity_addr_t &addr) = 0;
+  virtual bool set_addr_unknowns(const entity_addrvec_t &addrs) = 0;
   /**
    * Set the address for this Messenger. This is useful if the Messenger
    * binds to a specific address but advertises a different address on the
index a8407e18315f77d52b1f1d97882c8689b3800ad7..6e693a767cd49c8ad169f730733a1cac58069375 100644 (file)
@@ -657,17 +657,31 @@ void AsyncMessenger::submit_message(Message *m, AsyncConnectionRef con,
  * If my_addr doesn't have an IP set, this function
  * will fill it in from the passed addr. Otherwise it does nothing and returns.
  */
-void AsyncMessenger::set_addr_unknowns(const entity_addr_t &addr)
+bool AsyncMessenger::set_addr_unknowns(const entity_addrvec_t &addrs)
 {
+  bool ret = false;
   Mutex::Locker l(lock);
-  if (my_addrs.legacy_addr().is_blank_ip()) {
-    for (auto& a : my_addrs.v) {
+
+  for (auto& a : my_addrs.v) {
+    if (a.is_blank_ip()) {
       int port = a.get_port();
-      a.u = addr.u;
-      a.set_port(port);
+      for (auto& b : addrs.v) {
+       if (a.get_type() == b.get_type() &&
+           a.get_family() == b.get_family()) {
+         ldout(cct,1) << __func__ << " assuming my addr " << a
+                      << " matches provided addr " << b << dendl;
+         a = b;
+         a.set_port(port);
+         ret = true;
+         break;
+       }
+      }
     }
+  }
+  if (ret) {
     _init_local_connection();
   }
+  return ret;
 }
 
 void AsyncMessenger::set_addrs(const entity_addrvec_t &addrs)
index 16b9b9b4ba68b9cc68be2ced80eb634691312fd3..ee886a7d5109c87fac7c95885942b7a11890638f 100644 (file)
@@ -94,7 +94,7 @@ public:
   /** @defgroup Accessors
    * @{
    */
-  void set_addr_unknowns(const entity_addr_t &addr) override;
+  bool set_addr_unknowns(const entity_addrvec_t &addr) override;
   void set_addrs(const entity_addrvec_t &addrs) override;
 
   int get_dispatch_queue_len() override {
index efd836203300305370e2975f354701f361e05049..426a770ab276fef90562b85e45e47f570580e2ac 100644 (file)
@@ -147,8 +147,10 @@ int SimpleMessenger::_send_message(Message *m, Connection *con)
  * If my_inst.addr doesn't have an IP set, this function
  * will fill it in from the passed addr. Otherwise it does nothing and returns.
  */
-void SimpleMessenger::set_addr_unknowns(const entity_addr_t &addr)
+bool SimpleMessenger::set_addr_unknowns(const entity_addrvec_t &addrs)
 {
+  bool ret = false;
+  auto addr = addrs.legacy_addr();
   assert(my_addr == my_addrs.front());
   if (my_addr.is_blank_ip()) {
     ldout(cct,1) << __func__ << " " << addr << dendl;
@@ -158,10 +160,12 @@ void SimpleMessenger::set_addr_unknowns(const entity_addr_t &addr)
     t.set_port(port);
     set_addrs(entity_addrvec_t(t));
     init_local_connection();
+    ret = true;
   } else {
     ldout(cct,1) << __func__ << " " << addr << " no-op" << dendl;
   }
   assert(my_addr == my_addrs.front());
+  return ret;
 }
 
 void SimpleMessenger::set_myaddrs(const entity_addrvec_t &av)
index 56640cd41e76f6104bc7918d7ec7c12ff86a5987..2d47aeda672516c2fbb3f9718d056fb1e5e5fc3e 100644 (file)
@@ -93,7 +93,7 @@ public:
   /** @defgroup Accessors
    * @{
    */
-  void set_addr_unknowns(const entity_addr_t& addr) override;
+  bool set_addr_unknowns(const entity_addrvec_t& addr) override;
   void set_addrs(const entity_addrvec_t &addr) override;
   void set_myaddrs(const entity_addrvec_t& a) override;
 
index 8ce33d48256d1cc47028034bb791fcedce2d1e9e..a075708101872cda36cf4658143753069dc31641 100644 (file)
@@ -98,7 +98,7 @@ public:
                    void *cb_user_context);
 
   /* Messenger interface */
-  virtual void set_addr_unknowns(const entity_addr_t &addr) override
+  virtual bool set_addr_unknowns(const entity_addrvec_t &addr) override
     { } /* XXX applicable? */
   virtual void set_addr(const entity_addr_t &addr) override
     { } /* XXX applicable? */
index 7c2ff7f1d21b99ac1dc610f2afa4b81828c95d6c..b2a225d883279f7c43ba56de59b0538f6eb14298 100644 (file)
@@ -5350,64 +5350,30 @@ void OSD::_send_boot()
           << ", hb_back_addrs " << hb_back_addrs
           << ", hb_front_addrs " << hb_front_addrs
           << dendl;
-
-  for (auto& a : cluster_addrs.v) {
-    if (a.is_blank_ip()) {
-      int port = a.get_port();
-      for (auto& b : client_addrs.v) {
-       if (a.get_type() == b.get_type() &&
-           a.get_family() == b.get_family()) {
-         dout(10) << " assuming cluster_addr " << a
-                  << " matches client_addr " << b << dendl;
-         a = b;
-         a.set_port(port);
-         cluster_messenger->set_addr_unknowns(a);
-         break;
-       }
-      }
-    }
+  if (cluster_messenger->set_addr_unknowns(client_addrs)) {
+    dout(10) << " assuming cluster_addrs match client_addrs "
+            << client_addrs << dendl;
+    cluster_addrs = cluster_messenger->get_myaddrs();
   }
   if (auto session = local_connection->get_priv(); !session) {
     cluster_messenger->ms_deliver_handle_fast_connect(local_connection);
   }
 
   local_connection = hb_back_server_messenger->get_loopback_connection().get();
-  for (auto& a : hb_back_addrs.v) {
-    if (a.is_blank_ip()) {
-      int port = a.get_port();
-      for (auto& b : cluster_addrs.v) {
-       if (a.get_type() == b.get_type() &&
-           a.get_family() == b.get_family()) {
-         dout(10) << " assuming hb_back_addr " << a
-                  << " matches cluster_addr " << b << dendl;
-         a = b;
-         a.set_port(port);
-         hb_back_server_messenger->set_addr_unknowns(a);
-         break;
-       }
-      }
-    }
+  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);
   }
 
   local_connection = hb_front_server_messenger->get_loopback_connection().get();
-  for (auto& a : hb_front_addrs.v) {
-    if (a.is_blank_ip()) {
-      int port = a.get_port();
-      for (auto& b : client_addrs.v) {
-       if (a.get_type() == b.get_type() &&
-           a.get_family() == b.get_family()) {
-         dout(10) << " assuming hb_front_addr " << a
-                  << " matches client_addr " << b << dendl;
-         a = b;
-         a.set_port(port);
-         hb_front_server_messenger->set_addr_unknowns(a);
-         break;
-       }
-      }
-    }
+  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);