From 6582a688ae14cf21d4928657c1ba34ac60e795ea Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Mon, 9 Mar 2020 11:48:07 +0800 Subject: [PATCH] crimson/mgr: close() in background 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 --- src/crimson/mgr/client.cc | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/src/crimson/mgr/client.cc b/src/crimson/mgr/client.cc index 6c2a48121c343..60fbfdf683629 100644 --- a/src/crimson/mgr/client.cc +++ b/src/crimson/mgr/client.cc @@ -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(); - 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(); + m->daemon_name = local_conf()->name.get_id(); + return conn->send(std::move(m)); } seastar::future<> Client::handle_mgr_map(crimson::net::Connection*, -- 2.39.5