From 7d54be79585bc1e5d34bdeb57b16c26b9d1d1f6a Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Mon, 13 Feb 2023 14:42:13 +0800 Subject: [PATCH] crimson/net: fix the corner case when the replacing connection doesn't have socket Signed-off-by: Yingxin Cheng --- src/crimson/net/FrameAssemblerV2.cc | 7 ++++++- src/crimson/net/ProtocolV2.cc | 5 +++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/crimson/net/FrameAssemblerV2.cc b/src/crimson/net/FrameAssemblerV2.cc index 1b38263335a6a..1b6d5a0447cc9 100644 --- a/src/crimson/net/FrameAssemblerV2.cc +++ b/src/crimson/net/FrameAssemblerV2.cc @@ -83,7 +83,12 @@ seastar::future<> FrameAssemblerV2::replace_by(FrameAssemblerV2::mover_t &&mover txbuf.clear(); session_stream_handlers = std::move(mover.session_stream_handlers); session_comp_handlers = std::move(mover.session_comp_handlers); - return replace_shutdown_socket(std::move(mover.socket)); + if (has_socket()) { + return replace_shutdown_socket(std::move(mover.socket)); + } else { + set_socket(std::move(mover.socket)); + return seastar::now(); + } } void FrameAssemblerV2::start_recording() diff --git a/src/crimson/net/ProtocolV2.cc b/src/crimson/net/ProtocolV2.cc index 10bd054d1bd8a..1c404a52ab472 100644 --- a/src/crimson/net/ProtocolV2.cc +++ b/src/crimson/net/ProtocolV2.cc @@ -1716,9 +1716,9 @@ void ProtocolV2::trigger_replacing(bool reconnect, uint64_t new_connect_seq, uint64_t new_msg_seq) { - trigger_state(state_t::REPLACING, io_state_t::delay, false); - ceph_assert_always(has_socket); + ceph_assert_always(has_socket || state == state_t::CONNECTING); ceph_assert_always(!mover.socket->is_shutdown()); + trigger_state(state_t::REPLACING, io_state_t::delay, false); if (is_socket_valid) { frame_assembler->shutdown_socket(); is_socket_valid = false; @@ -1775,6 +1775,7 @@ void ProtocolV2::trigger_replacing(bool reconnect, } ); is_socket_valid = true; + has_socket = true; if (reconnect) { connect_seq = new_connect_seq; -- 2.39.5