]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
msgr: add client_bind to allow client messenger save ip
authorHaomai Wang <haomai@xsky.com>
Thu, 12 Jan 2017 07:04:28 +0000 (15:04 +0800)
committerHaomai Wang <haomai@xsky.com>
Thu, 12 Jan 2017 07:48:08 +0000 (15:48 +0800)
Signed-off-by: Haomai Wang <haomai@xsky.com>
src/ceph_osd.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

index 334fb7fa8e1770f8415c96bc107ab1d296d84fd7..4aab15d4515ea69bd86d29d74dac54e91a35f6fc 100644 (file)
@@ -560,6 +560,9 @@ int main(int argc, const char **argv)
       hb_back_addr.set_port(0);
   }
   r = ms_hb_back_server->bind(hb_back_addr);
+  if (r < 0)
+    exit(1);
+  r = ms_hb_back_client->client_bind(hb_back_addr);
   if (r < 0)
     exit(1);
 
@@ -568,6 +571,9 @@ int main(int argc, const char **argv)
   if (hb_front_addr.is_ip())
     hb_front_addr.set_port(0);
   r = ms_hb_front_server->bind(hb_front_addr);
+  if (r < 0)
+    exit(1);
+  r = ms_hb_front_client->client_bind(hb_back_addr);
   if (r < 0)
     exit(1);
 
index 08b53d9b7428e6859fc124cda3058f3d89a3a3cd..a66f8856bedcfba04522444390881c2f92236cc8 100644 (file)
@@ -408,6 +408,14 @@ public:
    * @param avoid_ports Additional port to avoid binding to.
    */
   virtual int rebind(const set<int>& avoid_ports) { return -EOPNOTSUPP; }
+  /**
+   * Bind the 'client' Messenger to a specific address.Messenger will bind
+   * the address before connect to others when option ms_bind_before_connect
+   * is true.
+   * @param bind_addr The address to bind to.
+   * @return 0 on success, or -1 on error, or -errno if
+   */
+  virtual int client_bind(const entity_addr_t& bind_addr) = 0;
   /**
    * @} // Configuration
    */
index 5a8d107117b81617186a1905df13ce244f2bac26..d0b939a2002e1299657219fe5f979b0a33f6e321 100644 (file)
@@ -376,6 +376,25 @@ int AsyncMessenger::rebind(const set<int>& avoid_ports)
   return 0;
 }
 
+int AsyncMessenger::client_bind(const entity_addr_t &bind_addr)
+{
+  lock.Lock();
+  if (did_bind) {
+    assert(my_inst.addr == bind_addr);
+    return 0;
+  }
+  if (started) {
+    ldout(cct, 10) << __func__ << " already started" << dendl;
+    lock.Unlock();
+    return -1;
+  }
+  ldout(cct, 10) << __func__ << " " << bind_addr << dendl;
+  lock.Unlock();
+
+  set_myaddr(bind_addr);
+  return 0;
+}
+
 void AsyncMessenger::_finish_bind(const entity_addr_t& bind_addr,
                                  const entity_addr_t& listen_addr)
 {
index 1eb2a6b982a20b1dab31aff2501ecb116af98e57..384e4465a7bde7de46909ba8efc4ab43cb702f37 100644 (file)
@@ -116,6 +116,7 @@ public:
 
   int bind(const entity_addr_t& bind_addr);
   int rebind(const set<int>& avoid_ports);
+  int client_bind(const entity_addr_t& bind_addr);
 
   /** @} Configuration functions */
 
index bc8834811414ec1ebe4de78344d273a7179470f6..aed27ac1b4e7419a47249a5d7c99b3fc58bf5a0b 100644 (file)
@@ -306,6 +306,27 @@ int SimpleMessenger::rebind(const set<int>& avoid_ports)
   return accepter.rebind(avoid_ports);
 }
 
+
+int SimpleMessenger::client_bind(const entity_addr_t &bind_addr)
+{
+  lock.Lock();
+  if (did_bind) {
+    assert(my_inst.addr == bind_addr);
+    return 0;
+  }
+  if (started) {
+    ldout(cct,10) << "rank.bind already started" << dendl;
+    lock.Unlock();
+    return -1;
+  }
+  ldout(cct,10) << "rank.bind " << bind_addr << dendl;
+  lock.Unlock();
+
+  set_myaddr(bind_addr);
+  return 0;
+}
+
+
 int SimpleMessenger::start()
 {
   lock.Lock();
index ac0c8293ec632d68945bf9fb7651463c2fbe941c..65005fda98c6a07faf4df088a7845c77f06abf13 100644 (file)
@@ -115,6 +115,7 @@ public:
 
   int bind(const entity_addr_t& bind_addr);
   int rebind(const set<int>& avoid_ports);
+  int client_bind(const entity_addr_t& bind_addr);
 
   /** @} Configuration functions */