]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/mgr: use periodical timer for report
authorKefu Chai <kchai@redhat.com>
Sat, 7 Mar 2020 10:53:07 +0000 (18:53 +0800)
committerKefu Chai <kchai@redhat.com>
Mon, 9 Mar 2020 03:49:57 +0000 (11:49 +0800)
* always rearm the timer when handling MMgrConfigure
* remove `mgr::Client::tick_period`

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

index 0cebc1c1e44bbb66e3092d1ada3817543741ed42..6c2a48121c3436332295f76a773bc6637d8e6453 100644 (file)
@@ -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<MMgrConfigure> 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();
     }
   });
 }
index a82b73bc1f81babd45dc26e1b5020911fdea90e4..0332c59d57b42d5d28d1ddf71d2c849d8ed4b38d 100644 (file)
@@ -52,7 +52,6 @@ private:
   crimson::net::Messenger& msgr;
   WithStats& with_stats;
   crimson::net::ConnectionRef conn;
-  std::chrono::seconds tick_period{0};
   seastar::timer<seastar::lowres_clock> tick_timer;
   seastar::gate gate;
 };