From 92fb44d1151bb7e86bc3300aebffdb3b2ed8ed5c Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 9 Oct 2008 11:58:10 -0700 Subject: [PATCH] mon: populate last_beacon properly for mds liveness check It was only populating on paxos updates, but that missed the case where the leader moves from one monitor to another (live) peon, who has an empty last_beacon. Move it where it makes the most sense. --- src/mon/MDSMonitor.cc | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/mon/MDSMonitor.cc b/src/mon/MDSMonitor.cc index 0132642f46d62..25f1ad70b9969 100644 --- a/src/mon/MDSMonitor.cc +++ b/src/mon/MDSMonitor.cc @@ -110,6 +110,7 @@ void MDSMonitor::create_initial() print_map(pending_mdsmap); } + bool MDSMonitor::update_from_paxos() { assert(paxos->is_active()); @@ -135,21 +136,6 @@ bool MDSMonitor::update_from_paxos() if (mon->is_leader()) { // bcast map to mds bcast_latest_mds(); - - // make sure last_beacon is populated - for (map::iterator p = mdsmap.mds_inst.begin(); - p != mdsmap.mds_inst.end(); - ++p) - if (last_beacon.count(p->second.addr) == 0 && - mdsmap.get_state(p->first) != MDSMap::STATE_DNE && - mdsmap.get_state(p->first) != MDSMap::STATE_STOPPED && - mdsmap.get_state(p->first) != MDSMap::STATE_FAILED) - last_beacon[p->second.addr] = g_clock.now(); - for (map::iterator p = mdsmap.standby.begin(); - p != mdsmap.standby.end(); - ++p ) - if (last_beacon.count(p->first) == 0) - last_beacon[p->first] = g_clock.now(); } send_to_waiting(); @@ -642,7 +628,6 @@ void MDSMonitor::send_latest(entity_inst_t dest) waiting_for_map.push_back(dest); } - void MDSMonitor::tick() { // make sure mds's are still alive @@ -691,7 +676,22 @@ void MDSMonitor::tick() // check beacon timestamps utime_t cutoff = g_clock.now(); cutoff -= g_conf.mds_beacon_grace; - + + // make sure last_beacon is populated + for (map::iterator p = mdsmap.mds_inst.begin(); + p != mdsmap.mds_inst.end(); + ++p) + if (last_beacon.count(p->second.addr) == 0 && + mdsmap.get_state(p->first) != MDSMap::STATE_DNE && + mdsmap.get_state(p->first) != MDSMap::STATE_STOPPED && + mdsmap.get_state(p->first) != MDSMap::STATE_FAILED) + last_beacon[p->second.addr] = g_clock.now(); + for (map::iterator p = mdsmap.standby.begin(); + p != mdsmap.standby.end(); + ++p ) + if (last_beacon.count(p->first) == 0) + last_beacon[p->first] = g_clock.now(); + map::iterator p = last_beacon.begin(); while (p != last_beacon.end()) { entity_addr_t addr = p->first; -- 2.39.5