]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/mgr: close() in background 33797/head
authorKefu Chai <kchai@redhat.com>
Mon, 9 Mar 2020 03:48:07 +0000 (11:48 +0800)
committerKefu Chai <kchai@redhat.com>
Mon, 9 Mar 2020 03:49:57 +0000 (11:49 +0800)
as per Yingxin,

application code is not required to wait for the `close()` future, it
would be safe to ignore it, because:
- `close()` will shutdown its socket synchronously;
- `close()` will create an internal `ConnectionRef` when it's closing;
- `Messenger` will wait for all connections closed during `shutdown()`;

Signed-off-by: Kefu Chai <kchai@redhat.com>
src/crimson/mgr/client.cc

index 6c2a48121c3436332295f76a773bc6637d8e6453..60fbfdf683629ee5977895011619e67328963650 100644 (file)
@@ -69,18 +69,20 @@ seastar::future<> Client::ms_handle_reset(crimson::net::ConnectionRef c)
 
 seastar::future<> Client::reconnect()
 {
-  return (conn ? conn->close() : seastar::now()).then([this] {
-    if (!mgrmap.get_available()) {
-      logger().warn("No active mgr available yet");
-      return seastar::now();
-    }
-    auto peer = mgrmap.get_active_addrs().front();
-    conn = msgr.connect(peer, CEPH_ENTITY_TYPE_MGR);
-    // ask for the mgrconfigure message
-    auto m = ceph::make_message<MMgrOpen>();
-    m->daemon_name = local_conf()->name.get_id();
-    return conn->send(std::move(m));
-  });
+  if (conn) {
+    // crimson::net::Protocol::close() is able to close() in background
+    (void)conn->close();
+  }
+  if (!mgrmap.get_available()) {
+    logger().warn("No active mgr available yet");
+    return seastar::now();
+  }
+  auto peer = mgrmap.get_active_addrs().front();
+  conn = msgr.connect(peer, CEPH_ENTITY_TYPE_MGR);
+  // ask for the mgrconfigure message
+  auto m = ceph::make_message<MMgrOpen>();
+  m->daemon_name = local_conf()->name.get_id();
+  return conn->send(std::move(m));
 }
 
 seastar::future<> Client::handle_mgr_map(crimson::net::Connection*,