]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/net: always dispatch accept when replaced/accepted
authorYingxin Cheng <yingxin.cheng@intel.com>
Fri, 6 Sep 2019 04:47:32 +0000 (12:47 +0800)
committerYingxin Cheng <yingxin.cheng@intel.com>
Wed, 18 Sep 2019 04:32:31 +0000 (12:32 +0800)
Fix issues of missing dispatches of accept event during connection
racing.

Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
src/crimson/net/ProtocolV2.cc
src/test/crimson/test_messenger.cc

index 537c0af0b99113feffc00570f27e1392f51a24be..2509271ef39c92a9567292ba422a233717deb298 100644 (file)
@@ -1761,15 +1761,13 @@ void ProtocolV2::trigger_replacing(bool reconnect,
   if (socket) {
     socket->shutdown();
   }
-  if (!reconnect && new_client_cookie != client_cookie) {
-    seastar::with_gate(pending_dispatch, [this] {
-      return dispatcher.ms_handle_accept(
-          seastar::static_pointer_cast<SocketConnection>(conn.shared_from_this()));
-    }).handle_exception([this] (std::exception_ptr eptr) {
-      logger().error("{} ms_handle_accept caught exception: {}", conn, eptr);
-      ceph_abort("unexpected exception from ms_handle_accept()");
-    });
-  }
+  seastar::with_gate(pending_dispatch, [this] {
+    return dispatcher.ms_handle_accept(
+        seastar::static_pointer_cast<SocketConnection>(conn.shared_from_this()));
+  }).handle_exception([this] (std::exception_ptr eptr) {
+    logger().error("{} ms_handle_accept caught exception: {}", conn, eptr);
+    ceph_abort("unexpected exception from ms_handle_accept()");
+  });
   seastar::with_gate(pending_dispatch,
                      [this,
                       reconnect,
index ef9fac9332aba4c6a5e25119c54fc2859c52831a..c3ba1dd3154d8e2ee4001ebb58aa4ad5766d34dd 100644 (file)
@@ -2010,7 +2010,7 @@ test_v2_lossless_establishing_fault(FailoverTest& test) {
     }).then([] (ConnResults& results) {
       results[0].assert_state_at(conn_state_t::established);
       results[0].assert_connect(0, 0, 0, 0);
-      results[0].assert_accept(1, 1, 0, 1);
+      results[0].assert_accept(1, 1, 0, 2);
       results[0].assert_reset(0, 0);
       results[1].assert_state_at(conn_state_t::replaced);
       results[1].assert_connect(0, 0, 0, 0);
@@ -2044,7 +2044,7 @@ test_v2_lossless_accepted_fault(FailoverTest& test) {
         }).then([] (ConnResults& results) {
           results[0].assert_state_at(conn_state_t::established);
           results[0].assert_connect(0, 0, 0, 0);
-          results[0].assert_accept(1, 1, 0, 1);
+          results[0].assert_accept(1, 1, 0, 2);
           results[0].assert_reset(0, 0);
           results[1].assert_state_at(conn_state_t::replaced);
           results[1].assert_connect(0, 0, 0, 0);
@@ -2084,7 +2084,11 @@ test_v2_lossless_reaccept_fault(FailoverTest& test) {
         }).then([bp] (ConnResults& results) {
           results[0].assert_state_at(conn_state_t::established);
           results[0].assert_connect(0, 0, 0, 0);
-          results[0].assert_accept(1, 1, 0, 1);
+          if (bp == Breakpoint{Tag::SESSION_RECONNECT, bp_type_t::READ}) {
+            results[0].assert_accept(1, 1, 0, 2);
+          } else {
+            results[0].assert_accept(1, 1, 0, 3);
+          }
           results[0].assert_reset(0, 0);
           if (bp == Breakpoint{Tag::SESSION_RECONNECT, bp_type_t::READ}) {
             results[1].assert_state_at(conn_state_t::closed);
@@ -2186,7 +2190,7 @@ test_v2_peer_establishing_fault(FailoverTest& test) {
     }).then([] (ConnResults& results) {
       results[0].assert_state_at(conn_state_t::established);
       results[0].assert_connect(0, 0, 0, 0);
-      results[0].assert_accept(1, 1, 0, 1);
+      results[0].assert_accept(1, 1, 0, 2);
       results[0].assert_reset(0, 0);
       results[1].assert_state_at(conn_state_t::replaced);
       results[1].assert_connect(0, 0, 0, 0);
@@ -2242,7 +2246,7 @@ test_v2_peer_connected_fault_reaccept(FailoverTest& test) {
     }).then([] (ConnResults& results) {
       results[0].assert_state_at(conn_state_t::established);
       results[0].assert_connect(1, 1, 0, 1);
-      results[0].assert_accept(0, 0, 0, 0);
+      results[0].assert_accept(0, 0, 0, 1);
       results[0].assert_reset(0, 0);
       results[1].assert_state_at(conn_state_t::replaced);
       results[1].assert_connect(0, 0, 0, 0);
@@ -2369,7 +2373,7 @@ test_v2_racing_reconnect_lose(FailoverTest& test) {
           results[0].assert_state_at(conn_state_t::established);
           ceph_assert(results[0].connect_attempts == 2);
           ceph_assert(results[0].cnt_connect_dispatched == 1);
-          results[0].assert_accept(0, 0, 0, 0);
+          results[0].assert_accept(0, 0, 0, 1);
           results[0].assert_reset(0, 0);
           results[1].assert_state_at(conn_state_t::replaced);
           results[1].assert_connect(0, 0, 0, 0);