]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/net: convert Messenger to an interface class
authorYingxin Cheng <yingxin.cheng@intel.com>
Thu, 20 Oct 2022 07:51:42 +0000 (15:51 +0800)
committerYingxin Cheng <yingxin.cheng@intel.com>
Fri, 21 Oct 2022 09:51:29 +0000 (17:51 +0800)
Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
src/crimson/net/Messenger.h
src/crimson/net/SocketMessenger.cc
src/crimson/net/SocketMessenger.h
src/test/crimson/test_messenger.cc

index 615403d5aa30538faeb9b04d5cb6316889748cf1..8415fbb40f59eb8e63b5cd7de44d61f5a43a6777 100644 (file)
@@ -36,30 +36,27 @@ using Throttle = crimson::common::Throttle;
 using SocketPolicy = ceph::net::Policy<Throttle>;
 
 class Messenger {
-  crimson::auth::AuthClient* auth_client = nullptr;
-  crimson::auth::AuthServer* auth_server = nullptr;
-
-protected:
-  entity_name_t my_name;
-  entity_addrvec_t my_addrs;
-
 public:
-  Messenger(const entity_name_t& name)
-    : my_name(name)
-  {}
+  Messenger() {}
+
   virtual ~Messenger() {}
 
-#ifdef UNIT_TESTS_BUILT
-  Interceptor *interceptor = nullptr;
-#endif
+  virtual const entity_name_t& get_myname() const = 0;
+
+  entity_type_t get_mytype() const { return get_myname().type(); }
+
+  virtual const entity_addrvec_t &get_myaddrs() const = 0;
+
+  entity_addr_t get_myaddr() const { return get_myaddrs().front(); }
 
-  entity_type_t get_mytype() const { return my_name.type(); }
-  const entity_name_t& get_myname() const { return my_name; }
-  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) = 0;
+
   virtual bool set_addr_unknowns(const entity_addrvec_t &addrs) = 0;
 
+  virtual void set_auth_client(crimson::auth::AuthClient *) = 0;
+
+  virtual void set_auth_server(crimson::auth::AuthServer *) = 0;
+
   using bind_ertr = crimson::errorator<
     crimson::ct_error::address_in_use, // The address (range) is already bound
     crimson::ct_error::address_not_available
@@ -96,15 +93,6 @@ public:
   // and must be called if is bound.
   virtual seastar::future<> shutdown() = 0;
 
-  crimson::auth::AuthClient* get_auth_client() const { return auth_client; }
-  void set_auth_client(crimson::auth::AuthClient *ac) {
-    auth_client = ac;
-  }
-  crimson::auth::AuthServer* get_auth_server() const { return auth_server; }
-  void set_auth_server(crimson::auth::AuthServer *as) {
-    auth_server = as;
-  }
-
   virtual void print(std::ostream& out) const = 0;
 
   virtual SocketPolicy get_policy(entity_type_t peer_type) const = 0;
@@ -121,6 +109,10 @@ public:
   create(const entity_name_t& name,
          const std::string& lname,
          const uint64_t nonce);
+
+#ifdef UNIT_TESTS_BUILT
+  virtual void set_interceptor(Interceptor *) = 0;
+#endif
 };
 
 inline std::ostream& operator<<(std::ostream& out, const Messenger& msgr) {
index 95b9946bf332d31fb757de59ed84f2ad157ae018..0a0092b25ec293371961cfcc34cab5b76f761a6f 100644 (file)
@@ -34,10 +34,10 @@ namespace crimson::net {
 SocketMessenger::SocketMessenger(const entity_name_t& myname,
                                  const std::string& logic_name,
                                  uint32_t nonce)
-  : Messenger{myname},
-    master_sid{seastar::this_shard_id()},
+  : master_sid{seastar::this_shard_id()},
     logic_name{logic_name},
-    nonce{nonce}
+    nonce{nonce},
+    my_name{myname}
 {}
 
 SocketMessenger::~SocketMessenger()
index 903455e96df56e981b47651ddd13f4a2c092adab..8d7a7670d80dde0290d56e2bfc40772280301145 100644 (file)
@@ -33,7 +33,14 @@ class FixedCPUServerSocket;
 
 class SocketMessenger final : public Messenger {
   const seastar::shard_id master_sid;
-  seastar::promise<> shutdown_promise;
+  // Distinguish messengers with meaningful names for debugging
+  const std::string logic_name;
+  const uint32_t nonce;
+
+  entity_name_t my_name;
+  entity_addrvec_t my_addrs;
+  crimson::auth::AuthClient* auth_client = nullptr;
+  crimson::auth::AuthServer* auth_server = nullptr;
 
   FixedCPUServerSocket* listener = nullptr;
   ChainedDispatchers dispatchers;
@@ -41,13 +48,11 @@ class SocketMessenger final : public Messenger {
   std::set<SocketConnectionRef> accepting_conns;
   std::vector<SocketConnectionRef> closing_conns;
   ceph::net::PolicySet<Throttle> policy_set;
-  // Distinguish messengers with meaningful names for debugging
-  const std::string logic_name;
-  const uint32_t nonce;
   // specifying we haven't learned our addr; set false when we find it.
   bool need_addr = true;
   uint32_t global_seq = 0;
   bool started = false;
+  seastar::promise<> shutdown_promise;
 
   listen_ertr::future<> do_listen(const entity_addrvec_t& addr);
   /// try to bind to the first unused port of given address
@@ -61,8 +66,25 @@ class SocketMessenger final : public Messenger {
                   uint32_t nonce);
   ~SocketMessenger() override;
 
+  const entity_name_t &get_myname() const override {
+    return my_name;
+  }
+
+  const entity_addrvec_t &get_myaddrs() const override {
+    return my_addrs;
+  }
+
   void set_myaddrs(const entity_addrvec_t& addr) override;
 
+  void set_auth_client(crimson::auth::AuthClient *ac) override {
+    auth_client = ac;
+  }
+
+  void set_auth_server(crimson::auth::AuthServer *as) override {
+    auth_server = as;
+  }
+
+
   bool set_addr_unknowns(const entity_addrvec_t &addr) override;
   // Messenger interfaces are assumed to be called from its own shard, but its
   // behavior should be symmetric when called from any shard.
@@ -110,6 +132,10 @@ class SocketMessenger final : public Messenger {
   void set_policy_throttler(entity_type_t peer_type, Throttle* throttle) override;
 
  public:
+  crimson::auth::AuthClient* get_auth_client() const { return auth_client; }
+
+  crimson::auth::AuthServer* get_auth_server() const { return auth_server; }
+
   uint32_t get_global_seq(uint32_t old=0);
 
   void learned_addr(const entity_addr_t &peer_addr_for_me,
@@ -127,6 +153,14 @@ class SocketMessenger final : public Messenger {
     assert(seastar::this_shard_id() == master_sid);
     return master_sid;
   }
+
+#ifdef UNIT_TESTS_BUILT
+  void set_interceptor(Interceptor *i) override {
+    interceptor = i;
+  }
+
+  Interceptor *interceptor = nullptr;
+#endif
 };
 
 } // namespace crimson::net
index 0b570f71d5836e87136a4fc96e5a12180ef9327f..dd5eea42cc2a1945e4a1436ba820fbb73a17c9b5 100644 (file)
@@ -924,7 +924,7 @@ class FailoverSuite : public Dispatcher {
     test_msgr->set_default_policy(policy);
     test_msgr->set_auth_client(&dummy_auth);
     test_msgr->set_auth_server(&dummy_auth);
-    test_msgr->interceptor = &interceptor;
+    test_msgr->set_interceptor(&interceptor);
     return test_msgr->bind(entity_addrvec_t{addr}).safe_then([this] {
       return test_msgr->start({this});
     }, Messenger::bind_ertr::all_same_way([addr] (const std::error_code& e) {