From 07fc9f66a69aa31d2cf8bf7a277d3e14ad6209be Mon Sep 17 00:00:00 2001 From: "Yan, Zheng" Date: Thu, 12 Mar 2015 11:01:46 +0800 Subject: [PATCH] mds: fix assertion caused by system clock backwards Fixes: #11053 Signed-off-by: Yan, Zheng --- src/mds/MDS.cc | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/src/mds/MDS.cc b/src/mds/MDS.cc index 4509cea214e8b..71b48d6b947ec 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 -- 2.39.5