From: Yingxin Cheng Date: Thu, 20 Oct 2022 07:51:42 +0000 (+0800) Subject: crimson/net: convert Messenger to an interface class X-Git-Tag: v18.1.0~967^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=fc0996546b2d55b18e2c398cfa717c49b88b8939;p=ceph.git crimson/net: convert Messenger to an interface class Signed-off-by: Yingxin Cheng --- diff --git a/src/crimson/net/Messenger.h b/src/crimson/net/Messenger.h index 615403d5aa30..8415fbb40f59 100644 --- a/src/crimson/net/Messenger.h +++ b/src/crimson/net/Messenger.h @@ -36,30 +36,27 @@ using Throttle = crimson::common::Throttle; using SocketPolicy = ceph::net::Policy; 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) { diff --git a/src/crimson/net/SocketMessenger.cc b/src/crimson/net/SocketMessenger.cc index 95b9946bf332..0a0092b25ec2 100644 --- a/src/crimson/net/SocketMessenger.cc +++ b/src/crimson/net/SocketMessenger.cc @@ -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() diff --git a/src/crimson/net/SocketMessenger.h b/src/crimson/net/SocketMessenger.h index 903455e96df5..8d7a7670d80d 100644 --- a/src/crimson/net/SocketMessenger.h +++ b/src/crimson/net/SocketMessenger.h @@ -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 accepting_conns; std::vector closing_conns; ceph::net::PolicySet 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 diff --git a/src/test/crimson/test_messenger.cc b/src/test/crimson/test_messenger.cc index 0b570f71d583..dd5eea42cc2a 100644 --- a/src/test/crimson/test_messenger.cc +++ b/src/test/crimson/test_messenger.cc @@ -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) {