]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/monc: renew_rotating_keyring() doesn't assume the clock is monotonic 47277/head
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Tue, 26 Jul 2022 09:39:08 +0000 (09:39 +0000)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Tue, 26 Jul 2022 12:04:54 +0000 (12:04 +0000)
According to the `seastar::lowres_system_clock` reference:

> This clock has the same granularity as lowres_clock,
> but it is not required to be monotonic and its time
> points correspond to system time.

we should similar check as the classical `MonClient` does:

```cpp
  if ((now > last_rotating_renew_sent) &&
      double(now - last_rotating_renew_sent) < 1) {
    ldout(cct, 10) << __func__ << " called too often (last: "
                   << last_rotating_renew_sent << "), skipping refresh" << dendl;
    return 0;
  }
```

This check is rather paranoidal and the main reason behind it
in crimson is replicating the classical behaviour.

Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
src/crimson/mon/MonClient.cc

index aee0c517019043676a0707d4072480a0cb334b64..263228c1571ccecaeebe86d8579bd624681a7040 100644 (file)
@@ -165,8 +165,10 @@ seastar::future<> Connection::renew_rotating_keyring()
     logger().info("renew_rotating_keyring renewing rotating keys "
                   " (they expired before {})", cutoff);
   }
-  if (now - last_rotating_renew_sent < std::chrono::seconds{1}) {
-    logger().info("renew_rotating_keyring called too often");
+  if ((now > last_rotating_renew_sent) &&
+      (now - last_rotating_renew_sent < std::chrono::seconds{1})) {
+    logger().info("renew_rotating_keyring called too often (last: {})",
+                  utime_t{last_rotating_renew_sent});
     return seastar::now();
   }
   last_rotating_renew_sent = now;