From 61d600687ae6887a2edea0e79d582b1353558a83 Mon Sep 17 00:00:00 2001 From: "Yan, Zheng" Date: Tue, 10 Mar 2015 19:55:57 +0800 Subject: [PATCH] mds: fix assertion caused by system clock backwards Fixes: #11053 Signed-off-by: Yan, Zheng --- src/mds/Beacon.cc | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/src/mds/Beacon.cc b/src/mds/Beacon.cc index 6f7d1288dcb27..6936ad44bc5f6 100644 --- a/src/mds/Beacon.cc +++ b/src/mds/Beacon.cc @@ -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 -- 2.39.5