From: Yan, Zheng Date: Thu, 12 Mar 2015 03:01:46 +0000 (+0800) Subject: mds: fix assertion caused by system clock backwards X-Git-Tag: v0.80.10~37^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=07fc9f66a69aa31d2cf8bf7a277d3e14ad6209be;p=ceph.git mds: fix assertion caused by system clock backwards Fixes: #11053 Signed-off-by: Yan, Zheng --- diff --git a/src/mds/MDS.cc b/src/mds/MDS.cc index 4509cea214e..71b48d6b947 100644 --- a/src/mds/MDS.cc +++ b/src/mds/MDS.cc @@ -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