]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson: add entity_addrvec_t interfaces to Messenger
authorKefu Chai <kchai@redhat.com>
Wed, 9 Jan 2019 15:51:44 +0000 (23:51 +0800)
committerKefu Chai <kchai@redhat.com>
Fri, 18 Jan 2019 04:32:19 +0000 (12:32 +0800)
Signed-off-by: Kefu Chai <kchai@redhat.com>
src/crimson/net/Messenger.h
src/crimson/net/SocketMessenger.cc
src/crimson/net/SocketMessenger.h
src/test/crimson/test_alien_echo.cc
src/test/crimson/test_messenger.cc

index e78f1a373bc3de5b6fb498f66bafbd70d5b2bddf..5033bfe10907afb47d314f8bc19a4d0eecdecbf4 100644 (file)
@@ -24,7 +24,7 @@ namespace ceph::net {
 
 class Messenger {
   entity_name_t my_name;
-  entity_addr_t my_addr;
+  entity_addrvec_t my_addrs;
   uint32_t global_seq = 0;
   uint32_t crc_flags = 0;
 
@@ -35,13 +35,14 @@ class Messenger {
   virtual ~Messenger() {}
 
   const entity_name_t& get_myname() const { return my_name; }
-  const entity_addr_t& get_myaddr() const { return my_addr; }
-  virtual void set_myaddr(const entity_addr_t& addr) {
-    my_addr = addr;
+  const entity_addrvec_t& get_myaddrs() const { return my_addrs; }
+  entity_addr_t get_myaddr() const { return my_addrs.front(); }
+  virtual void set_myaddrs(const entity_addrvec_t& addrs) {
+    my_addrs = addrs;
   }
 
   /// bind to the given address
-  virtual void bind(const entity_addr_t& addr) = 0;
+  virtual void bind(const entity_addrvec_t& addr) = 0;
 
   /// start the messenger
   virtual seastar::future<> start(Dispatcher *dispatcher) = 0;
index 6fe4932f3e93efec9569b2a258a63dafacd07274..74a0b86333e2cea8935c60910cb0687e217a0489 100644 (file)
@@ -34,21 +34,26 @@ SocketMessenger::SocketMessenger(const entity_name_t& myname,
   : Messenger{myname}, logic_name{logic_name}, nonce{nonce}
 {}
 
-void SocketMessenger::set_myaddr(const entity_addr_t& addr)
+void SocketMessenger::set_myaddrs(const entity_addrvec_t& addrs)
 {
-  entity_addr_t my_addr = addr;
-  my_addr.nonce = nonce;
+  auto my_addrs = addrs;
+  for (auto& addr : my_addrs.v) {
+    addr.nonce = nonce;
+  }
   // TODO: propagate to all the cores of the Messenger
-  Messenger::set_myaddr(my_addr);
+  Messenger::set_myaddrs(my_addrs);
 }
 
-void SocketMessenger::bind(const entity_addr_t& addr)
+void SocketMessenger::bind(const entity_addrvec_t& addrs)
 {
+  // TODO: v2: listen on multiple addresses
+  auto addr = addrs.legacy_addr();
+
   if (addr.get_family() != AF_INET) {
     throw std::system_error(EAFNOSUPPORT, std::generic_category());
   }
 
-  set_myaddr(addr);
+  set_myaddrs(addrs);
 
   seastar::socket_address address(addr.in4_addr());
   seastar::listen_options lo;
@@ -125,7 +130,7 @@ void SocketMessenger::learned_addr(const entity_addr_t &peer_addr_for_me)
   addr.u = peer_addr_for_me.u;
   addr.set_type(peer_addr_for_me.get_type());
   addr.set_port(get_myaddr().get_port());
-  set_myaddr(addr);
+  set_myaddrs(entity_addrvec_t{addr});
 }
 
 void SocketMessenger::set_default_policy(const SocketPolicy& p)
index 372de243feb355fedb27e44505e2385145d4ebe5..4843d569527f124520e041a2baf5c330a0d265e0 100644 (file)
@@ -48,9 +48,9 @@ class SocketMessenger final : public Messenger {
                   const std::string& logic_name,
                   uint32_t nonce);
 
-  void set_myaddr(const entity_addr_t& addr) override;
+  void set_myaddrs(const entity_addrvec_t& addr) override;
 
-  void bind(const entity_addr_t& addr) override;
+  void bind(const entity_addrvec_t& addr) override;
 
   seastar::future<> start(Dispatcher *dispatcher) override;
 
index 046d48971b41da231e429f164c3a3240ab142b99..d327cd92d50175215781dca6b6057e957b4324e1 100644 (file)
@@ -280,7 +280,7 @@ seastar_echo(SeastarContext& sc,
         // bind the server
         server.msgr.set_policy_throttler(entity_name_t::TYPE_OSD,
                                          &server.byte_throttler);
-        server.msgr.bind(addr);
+        server.msgr.bind(entity_addrvec_t{addr});
         return server.msgr.start(&server.dispatcher)
           .then([&dispatcher=server.dispatcher, count] {
             return dispatcher.on_reply.wait([&dispatcher, count] {
index e5a582c80b378cdb87dcca80ebe2b2924b514df2..9b6cede47ab75ae7e5b4422f3f871035f0517175 100644 (file)
@@ -85,7 +85,7 @@ static seastar::future<> test_echo(unsigned rounds,
       t.addr.set_family(AF_INET);
       t.addr.set_port(9010);
       t.addr.set_nonce(1);
-      t.server.messenger.bind(t.addr);
+      t.server.messenger.bind(entity_addrvec_t{t.addr});
 
       t.client.rounds = rounds;
       t.client.keepalive_dist = std::bernoulli_distribution{keepalive_ratio};
@@ -164,7 +164,7 @@ static seastar::future<> test_concurrent_dispatch()
       t.addr.set_family(AF_INET);
       t.addr.set_port(9010);
       t.addr.set_nonce(3);
-      t.server.messenger.bind(t.addr);
+      t.server.messenger.bind(entity_addrvec_t{t.addr});
 
       return t.server.messenger.start(&t.server.dispatcher)
         .then([&] {