]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: fix assertion caused by system clock backwards 3971/head
authorYan, Zheng <zyan@redhat.com>
Tue, 10 Mar 2015 11:55:57 +0000 (19:55 +0800)
committerYan, Zheng <zyan@redhat.com>
Thu, 12 Mar 2015 03:05:16 +0000 (11:05 +0800)
Fixes: #11053
Signed-off-by: Yan, Zheng <zyan@redhat.com>
src/mds/Beacon.cc

index 6f7d1288dcb27a6655984792dffeeb0e1fa41f67..6936ad44bc5f644cb945a86c3e0f5c40a4b7bd4f 100644 (file)
@@ -105,19 +105,26 @@ void Beacon::handle_mds_beacon(MMDSBeacon *m)
 
   // update lab
   if (seq_stamp.count(seq)) {
-    assert(seq_stamp[seq] > last_acked_stamp);
-    last_acked_stamp = seq_stamp[seq];
     utime_t now = ceph_clock_now(g_ceph_context);
-    utime_t rtt = now - last_acked_stamp;
+    if (seq_stamp[seq] > last_acked_stamp) {
+      last_acked_stamp = seq_stamp[seq];
+      utime_t rtt = now - last_acked_stamp;
 
-    dout(10) << "handle_mds_beacon " << ceph_mds_state_name(m->get_state())
-            << " seq " << m->get_seq() 
-            << " rtt " << rtt << dendl;
+      dout(10) << "handle_mds_beacon " << ceph_mds_state_name(m->get_state())
+              << " seq " << m->get_seq() << " rtt " << rtt << dendl;
 
-    if (was_laggy && rtt < g_conf->mds_beacon_grace) {
-      dout(0) << "handle_mds_beacon no longer laggy" << dendl;
-      was_laggy = false;
-      laggy_until = now;
+      if (was_laggy && rtt < g_conf->mds_beacon_grace) {
+       dout(0) << "handle_mds_beacon no longer laggy" << dendl;
+       was_laggy = false;
+       laggy_until = now;
+      }
+    } else {
+      // Mark myself laggy if system clock goes backwards. Hopping
+      // later beacons will clear it.
+      dout(1) << "handle_mds_beacon system clock goes backwards, "
+             << "mark myself laggy" << dendl;
+      last_acked_stamp = now - utime_t(g_conf->mds_beacon_grace + 1, 0);
+      was_laggy = true;
     }
 
     // clean up seq_stamp map