From 3dfdf0e86baa889fa0439cf397bbdf517a0e1113 Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Sat, 7 Mar 2020 18:53:07 +0800 Subject: [PATCH] crimson/mgr: use periodical timer for report * always rearm the timer when handling MMgrConfigure * remove `mgr::Client::tick_period` Signed-off-by: Kefu Chai --- src/crimson/mgr/client.cc | 28 ++++++++++++++-------------- src/crimson/mgr/client.h | 1 - 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/crimson/mgr/client.cc b/src/crimson/mgr/client.cc index 0cebc1c1e44..6c2a48121c3 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 a82b73bc1f8..0332c59d57b 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; }; -- 2.39.5