]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/net: make connect/accept atomic with state transition
authorYingxin Cheng <yingxin.cheng@intel.com>
Mon, 26 Aug 2019 06:13:09 +0000 (14:13 +0800)
committerYingxin Cheng <yingxin.cheng@intel.com>
Wed, 28 Aug 2019 02:16:39 +0000 (10:16 +0800)
Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
src/crimson/net/ProtocolV2.cc

index f60b820eebeefaae2c0dd5685bf21648d2d04739..4872631eb4349a69a5c89606c7cd5f3095922c18 100644 (file)
@@ -765,15 +765,7 @@ ProtocolV2::client_connect()
             server_cookie = 0;
           }
 
-          return seastar::futurize_apply([this] {
-            return dispatcher.ms_handle_connect(
-                seastar::static_pointer_cast<SocketConnection>(conn.shared_from_this()));
-          }).handle_exception([this] (std::exception_ptr eptr) {
-            logger().error("{} ms_handle_connect caught exception: {}", conn, eptr);
-            ceph_abort("unexpected exception from ms_handle_connect()");
-          });
-        }).then([this] {
-          return next_step_t::ready;
+          return seastar::make_ready_future<next_step_t>(next_step_t::ready);
         });
       default: {
         unexpected_tag(tag, conn, "post_client_connect");
@@ -841,15 +833,7 @@ ProtocolV2::client_reconnect()
           logger().debug("{} GOT ReconnectOkFrame: msg_seq={}",
                          conn, reconnect_ok.msg_seq());
           requeue_up_to(reconnect_ok.msg_seq());
-          return seastar::futurize_apply([this] {
-            return dispatcher.ms_handle_connect(
-                seastar::static_pointer_cast<SocketConnection>(conn.shared_from_this()));
-          }).handle_exception([this] (std::exception_ptr eptr) {
-            logger().error("{} ms_handle_connect caught exception: {}", conn, eptr);
-            ceph_abort("unexpected exception from ms_handle_connect()");
-          });
-        }).then([this] {
-          return next_step_t::ready;
+          return seastar::make_ready_future<next_step_t>(next_step_t::ready);
         });
       default: {
         unexpected_tag(tag, conn, "post_client_reconnect");
@@ -942,6 +926,13 @@ void ProtocolV2::execute_connecting()
         }).then([this] (next_step_t next) {
           switch (next) {
            case next_step_t::ready: {
+            seastar::with_gate(pending_dispatch, [this] {
+              return dispatcher.ms_handle_connect(
+                  seastar::static_pointer_cast<SocketConnection>(conn.shared_from_this()));
+            }).handle_exception([this] (std::exception_ptr eptr) {
+              logger().error("{} ms_handle_connect caught exception: {}", conn, eptr);
+              ceph_abort("unexpected exception from ms_handle_connect()");
+            });
             logger().info("{} connected: gs={}, pgs={}, cs={},"
                           " client_cookie={}, server_cookie={}, in_seq={}, out_seq={}",
                           conn, global_seq, peer_global_seq, connect_seq,
@@ -1516,6 +1507,13 @@ void ProtocolV2::execute_accepting()
         }).then([this] (next_step_t next) {
           switch (next) {
            case next_step_t::ready: {
+            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()");
+            });
             messenger.register_conn(
               seastar::static_pointer_cast<SocketConnection>(
                 conn.shared_from_this()));
@@ -1623,15 +1621,6 @@ ProtocolV2::send_server_ident()
 
     conn.set_features(connection_features);
 
-    // notify
-    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()");
-    });
-
     return write_frame(server_ident);
   }).then([] {
     return next_step_t::ready;