From: Kefu Chai Date: Mon, 9 Mar 2020 03:48:07 +0000 (+0800) Subject: crimson/mgr: close() in background X-Git-Tag: v15.1.1~63^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=6582a688ae14cf21d4928657c1ba34ac60e795ea;p=ceph.git 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 --- diff --git a/src/crimson/mgr/client.cc b/src/crimson/mgr/client.cc index 6c2a48121c34..60fbfdf68362 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*,