From: Yan, Zheng Date: Tue, 10 Mar 2015 11:55:57 +0000 (+0800) Subject: mds: fix assertion caused by system clock backwards X-Git-Tag: v9.0.0~169^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F3922%2Fhead;p=ceph.git mds: fix assertion caused by system clock backwards Fixes: #11053 Signed-off-by: Yan, Zheng --- diff --git a/src/mds/Beacon.cc b/src/mds/Beacon.cc index 6a6a5c8c2b15..1590daa1a681 100644 --- a/src/mds/Beacon.cc +++ b/src/mds/Beacon.cc @@ -106,19 +106,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