]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/net: fix the corner case when the replacing connection doesn't have socket 49420/head
authorYingxin Cheng <yingxin.cheng@intel.com>
Mon, 13 Feb 2023 06:42:13 +0000 (14:42 +0800)
committerYingxin Cheng <yingxin.cheng@intel.com>
Mon, 13 Feb 2023 06:42:13 +0000 (14:42 +0800)
Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
src/crimson/net/FrameAssemblerV2.cc
src/crimson/net/ProtocolV2.cc

index 1b38263335a6a8a78ca346f8e6cbcfcb3e0d3e7b..1b6d5a0447cc9121a86af1aeae90e0148ffeb663 100644 (file)
@@ -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()
index 10bd054d1bd8a4bcdca3294895e8440e0e4f9ed9..1c404a52ab472b2865544fa55a2b6014fa55b612 100644 (file)
@@ -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;