]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: fix assertion caused by system clock backwards 3970/head
authorYan, Zheng <zyan@redhat.com>
Thu, 12 Mar 2015 03:01:46 +0000 (11:01 +0800)
committerYan, Zheng <zyan@redhat.com>
Thu, 12 Mar 2015 03:04:14 +0000 (11:04 +0800)
Fixes: #11053
Signed-off-by: Yan, Zheng <zyan@redhat.com>
src/mds/MDS.cc

index 4509cea214e8b857df71cdaa1e1aac725965e882..71b48d6b947ecaf6ef27d2df5ba437a00df15127 100644 (file)
@@ -692,19 +692,26 @@ void MDS::handle_mds_beacon(MMDSBeacon *m)
 
   // update lab
   if (beacon_seq_stamp.count(seq)) {
-    assert(beacon_seq_stamp[seq] > beacon_last_acked_stamp);
-    beacon_last_acked_stamp = beacon_seq_stamp[seq];
     utime_t now = ceph_clock_now(g_ceph_context);
-    utime_t rtt = now - beacon_last_acked_stamp;
+    if (beacon_seq_stamp[seq] > beacon_last_acked_stamp) {
+      beacon_last_acked_stamp = beacon_seq_stamp[seq];
+      utime_t rtt = now - beacon_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;
+      beacon_last_acked_stamp = now - utime_t(g_conf->mds_beacon_grace + 1, 0);
+      was_laggy = true;
     }
 
     // clean up seq_stamp map