From 159e715881bf75e6b5519b5b2a77741e8ce95faa Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Wed, 26 Apr 2023 16:33:28 +0800 Subject: [PATCH] crimson/net: wrap message with foreign-ptr in the send path Signed-off-by: Yingxin Cheng (cherry picked from commit db07ae9d5cf8e6ac8031eec0689c74a9d5f55aff) --- src/crimson/net/Fwd.h | 2 ++ src/crimson/net/SocketConnection.cc | 3 ++- src/crimson/net/SocketConnection.h | 2 +- src/crimson/net/io_handler.cc | 6 +++--- src/crimson/net/io_handler.h | 6 +++--- 5 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/crimson/net/Fwd.h b/src/crimson/net/Fwd.h index 1dc4809810d..2b159514193 100644 --- a/src/crimson/net/Fwd.h +++ b/src/crimson/net/Fwd.h @@ -47,4 +47,6 @@ using dispatchers_t = boost::container::small_vector; +using MessageFRef = seastar::foreign_ptr; + } // namespace crimson::net diff --git a/src/crimson/net/SocketConnection.cc b/src/crimson/net/SocketConnection.cc index 1cbc3cf3fba..70abd6fc62f 100644 --- a/src/crimson/net/SocketConnection.cc +++ b/src/crimson/net/SocketConnection.cc @@ -68,8 +68,9 @@ bool SocketConnection::peer_wins() const return (messenger.get_myaddr() > peer_addr || policy.server); } -seastar::future<> SocketConnection::send(MessageURef msg) +seastar::future<> SocketConnection::send(MessageURef _msg) { + MessageFRef msg = seastar::make_foreign(std::move(_msg)); return seastar::smp::submit_to( io_handler->get_shard_id(), [this, msg=std::move(msg)]() mutable { diff --git a/src/crimson/net/SocketConnection.h b/src/crimson/net/SocketConnection.h index c986370fc01..d1d4ae8a712 100644 --- a/src/crimson/net/SocketConnection.h +++ b/src/crimson/net/SocketConnection.h @@ -52,7 +52,7 @@ public: virtual bool is_connected() const = 0; - virtual seastar::future<> send(MessageURef) = 0; + virtual seastar::future<> send(MessageFRef) = 0; virtual seastar::future<> send_keepalive() = 0; diff --git a/src/crimson/net/io_handler.cc b/src/crimson/net/io_handler.cc index 63e0c93c9fd..70e6650c699 100644 --- a/src/crimson/net/io_handler.cc +++ b/src/crimson/net/io_handler.cc @@ -85,7 +85,7 @@ ceph::bufferlist IOHandler::sweep_out_pending_msgs_to_sent( std::for_each( out_pending_msgs.begin(), out_pending_msgs.begin()+num_msgs, - [this, &bl](const MessageURef& msg) { + [this, &bl](const MessageFRef& msg) { // set priority msg->get_header().src = conn.messenger.get_myname(); @@ -122,7 +122,7 @@ ceph::bufferlist IOHandler::sweep_out_pending_msgs_to_sent( return bl; } -seastar::future<> IOHandler::send(MessageURef msg) +seastar::future<> IOHandler::send(MessageFRef msg) { ceph_assert_always(seastar::this_shard_id() == sid); if (io_state != io_state_t::drop) { @@ -272,7 +272,7 @@ void IOHandler::requeue_out_sent() out_seq -= out_sent_msgs.size(); logger().debug("{} requeue {} items, revert out_seq to {}", conn, out_sent_msgs.size(), out_seq); - for (MessageURef& msg : out_sent_msgs) { + for (MessageFRef& msg : out_sent_msgs) { msg->clear_payload(); msg->set_seq(0); } diff --git a/src/crimson/net/io_handler.h b/src/crimson/net/io_handler.h index 3f2d6f9a453..4fbe33960a3 100644 --- a/src/crimson/net/io_handler.h +++ b/src/crimson/net/io_handler.h @@ -70,7 +70,7 @@ private: return protocol_is_connected; } - seastar::future<> send(MessageURef msg) final; + seastar::future<> send(MessageFRef msg) final; seastar::future<> send_keepalive() final; @@ -227,10 +227,10 @@ private: seq_num_t out_seq = 0; // messages to be resent after connection gets reset - std::deque out_pending_msgs; + std::deque out_pending_msgs; // messages sent, but not yet acked by peer - std::deque out_sent_msgs; + std::deque out_sent_msgs; bool need_keepalive = false; -- 2.39.5