From 8e7ce94575b163d9d172854c4a0a5dee750e462c Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Mon, 5 Dec 2022 16:30:25 +0800 Subject: [PATCH] crimson/net: move is_connected() from ProtocolV2 to Protocol Infer is_connected by connection events instead of the protocol V2 internals. That can save a cross-core operation for connection users from the connection IO core to the handshake core. Signed-off-by: Yingxin Cheng --- src/crimson/net/Protocol.cc | 8 ++++++++ src/crimson/net/Protocol.h | 8 ++++++-- src/crimson/net/ProtocolV2.cc | 6 ------ src/crimson/net/ProtocolV2.h | 2 -- src/crimson/osd/heartbeat.cc | 1 - 5 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/crimson/net/Protocol.cc b/src/crimson/net/Protocol.cc index b20af96097b..12985bc7e00 100644 --- a/src/crimson/net/Protocol.cc +++ b/src/crimson/net/Protocol.cc @@ -151,6 +151,7 @@ void Protocol::set_out_state( bool dispatch_in = false; if (new_state == out_state_t::open) { // to open + ceph_assert_always(protocol_is_connected == true); assert(fa != nullptr); ceph_assert_always(frame_assembler == nullptr); frame_assembler = std::move(fa); @@ -163,6 +164,8 @@ void Protocol::set_out_state( #endif } else if (out_state == out_state_t::open) { // from open + ceph_assert_always(protocol_is_connected == true); + protocol_is_connected = false; assert(fa == nullptr); ceph_assert_always(frame_assembler->is_socket_valid()); frame_assembler->shutdown_socket(); @@ -271,12 +274,17 @@ void Protocol::reset_out() void Protocol::dispatch_accept() { + // protocol_is_connected can be from true to true here if the replacing is + // happening to a connected connection. + protocol_is_connected = true; dispatchers.ms_handle_accept( seastar::static_pointer_cast(conn.shared_from_this())); } void Protocol::dispatch_connect() { + ceph_assert_always(protocol_is_connected == false); + protocol_is_connected = true; dispatchers.ms_handle_connect( seastar::static_pointer_cast(conn.shared_from_this())); } diff --git a/src/crimson/net/Protocol.h b/src/crimson/net/Protocol.h index c107bee66fd..4446e1781fb 100644 --- a/src/crimson/net/Protocol.h +++ b/src/crimson/net/Protocol.h @@ -21,8 +21,6 @@ class Protocol { Protocol(Protocol&&) = delete; virtual ~Protocol(); - virtual bool is_connected() const = 0; - virtual void close() = 0; virtual seastar::future<> close_clean_yielded() = 0; @@ -53,6 +51,10 @@ class Protocol { public: using clock_t = seastar::lowres_system_clock; + bool is_connected() const { + return protocol_is_connected; + } + seastar::future<> send(MessageURef msg); seastar::future<> send_keepalive(); @@ -168,6 +170,8 @@ class Protocol { FrameAssemblerV2Ref frame_assembler; + bool protocol_is_connected = false; + /* * out states for writing */ diff --git a/src/crimson/net/ProtocolV2.cc b/src/crimson/net/ProtocolV2.cc index 875b3c25772..76e21de0484 100644 --- a/src/crimson/net/ProtocolV2.cc +++ b/src/crimson/net/ProtocolV2.cc @@ -166,12 +166,6 @@ ProtocolV2::ProtocolV2(ChainedDispatchers& dispatchers, ProtocolV2::~ProtocolV2() {} -bool ProtocolV2::is_connected() const { - return state == state_t::READY || - state == state_t::ESTABLISHING || - state == state_t::REPLACING; -} - void ProtocolV2::start_connect(const entity_addr_t& _peer_addr, const entity_name_t& _peer_name) { diff --git a/src/crimson/net/ProtocolV2.h b/src/crimson/net/ProtocolV2.h index 12c1a63878a..ec4d2646813 100644 --- a/src/crimson/net/ProtocolV2.h +++ b/src/crimson/net/ProtocolV2.h @@ -19,8 +19,6 @@ class ProtocolV2 final : public Protocol { // public to SocketConnection, but private to the others private: - bool is_connected() const override; - void close() override; seastar::future<> close_clean_yielded() override; diff --git a/src/crimson/osd/heartbeat.cc b/src/crimson/osd/heartbeat.cc index b4cdba6f2f2..94b3d688627 100644 --- a/src/crimson/osd/heartbeat.cc +++ b/src/crimson/osd/heartbeat.cc @@ -406,7 +406,6 @@ void Heartbeat::Connection::replaced() racing_detected = true; logger().warn("Heartbeat::Connection::replaced(): {} racing", *this); assert(conn != replaced_conn); - assert(conn->is_connected()); } void Heartbeat::Connection::reset() -- 2.39.5