From: Kefu Chai Date: Sat, 7 Mar 2020 10:53:07 +0000 (+0800) Subject: crimson/mgr: use periodical timer for report X-Git-Tag: v15.1.1~63^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=3dfdf0e86baa889fa0439cf397bbdf517a0e1113;p=ceph.git crimson/mgr: use periodical timer for report * always rearm the timer when handling MMgrConfigure * remove `mgr::Client::tick_period` Signed-off-by: Kefu Chai --- diff --git a/src/crimson/mgr/client.cc b/src/crimson/mgr/client.cc index 0cebc1c1e44b..6c2a48121c34 100644 --- a/src/crimson/mgr/client.cc +++ b/src/crimson/mgr/client.cc @@ -62,6 +62,7 @@ seastar::future<> Client::ms_handle_reset(crimson::net::ConnectionRef c) { if (conn == c) { conn = nullptr; + tick_timer.cancel(); } return seastar::now(); } @@ -100,29 +101,28 @@ seastar::future<> Client::handle_mgr_conf(crimson::net::Connection* conn, Ref m) { logger().info("{} {}", __func__, *m); - tick_period = std::chrono::seconds{m->stats_period}; - if (tick_period.count() && !tick_timer.armed() ) { - tick(); + + auto tick_period = std::chrono::seconds{m->stats_period}; + if (tick_period.count()) { + if (tick_timer.armed()) { + tick_timer.rearm(tick_timer.get_timeout(), tick_period); + } else { + tick_timer.arm_periodic(tick_period); + } + } else { + tick_timer.cancel(); } return seastar::now(); } void Client::tick() { - (void) seastar::with_gate(gate, [=] { + (void) seastar::with_gate(gate, [this] { if (conn) { auto pg_stats = with_stats.get_stats(); - return conn->send(std::move(pg_stats)).finally([this] { - if (tick_period.count()) { - tick_timer.arm(tick_period); - } - }); + return conn->send(std::move(pg_stats)); } else { - return reconnect().finally([this] { - if (tick_period.count()) { - tick_timer.arm(tick_period); - } - });; + return reconnect(); } }); } diff --git a/src/crimson/mgr/client.h b/src/crimson/mgr/client.h index a82b73bc1f81..0332c59d57b4 100644 --- a/src/crimson/mgr/client.h +++ b/src/crimson/mgr/client.h @@ -52,7 +52,6 @@ private: crimson::net::Messenger& msgr; WithStats& with_stats; crimson::net::ConnectionRef conn; - std::chrono::seconds tick_period{0}; seastar::timer tick_timer; seastar::gate gate; };