From 28edbe5f3132e056f39b7415c16cc4cf95b2cd3e Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 26 Apr 2011 15:26:57 -0700 Subject: [PATCH] mon: rework assignment of standby-replay, expansion nodes Signed-off-by: Sage Weil --- src/mds/MDSMap.h | 31 ++++++++++++++----------------- src/mon/MDSMonitor.cc | 3 +-- 2 files changed, 15 insertions(+), 19 deletions(-) diff --git a/src/mds/MDSMap.h b/src/mds/MDSMap.h index 96e4363030708..df9369f75d34e 100644 --- a/src/mds/MDSMap.h +++ b/src/mds/MDSMap.h @@ -325,18 +325,14 @@ public: for (map::const_iterator p = mds_info.begin(); p != mds_info.end(); ++p) { - if (((p->second.rank == -1 && - (p->second.standby_for_rank == mds || - p->second.standby_for_name == name)) || - (p->second.standby_for_rank == MDS_STANDBY_ANY)) && - (p->second.state == MDSMap::STATE_STANDBY || - p->second.state == MDSMap::STATE_STANDBY_REPLAY) && - !p->second.laggy()) { - if (p->second.standby_for_rank == MDS_STANDBY_ANY) - generic_standby = p; - else - return p->first; - } + if ((p->second.state != MDSMap::STATE_STANDBY && p->second.state != MDSMap::STATE_STANDBY_REPLAY) || + p->second.laggy() || + p->second.rank >= 0) + continue; + if (p->second.standby_for_rank == mds || (name.length() && p->second.standby_for_name == name)) + return p->first; + if (p->second.standby_for_rank < 0 && p->second.standby_for_name.length() == 0) + generic_standby = p; } if (generic_standby != mds_info.end()) return generic_standby->first; @@ -346,12 +342,13 @@ public: for (map::const_iterator p = mds_info.begin(); p != mds_info.end(); ++p) { - if (p->second.rank == -1 && - (p->second.standby_for_rank == MDS_NO_STANDBY_PREF || + if (p->second.state != MDSMap::STATE_STANDBY || + p->second.laggy() || + p->second.rank >= 0) + continue; + if ((p->second.standby_for_rank == MDS_NO_STANDBY_PREF || p->second.standby_for_rank == MDS_MATCHED_ACTIVE || - (p->second.standby_for_rank == MDS_STANDBY_ANY && g_conf.mon_force_standby_active)) && - p->second.state == MDSMap::STATE_STANDBY && - !p->second.laggy()) { + (p->second.standby_for_rank == MDS_STANDBY_ANY && g_conf.mon_force_standby_active))) { return p->first; } } diff --git a/src/mon/MDSMonitor.cc b/src/mon/MDSMonitor.cc index 4a299eed16c41..51d5a0bfd1708 100644 --- a/src/mon/MDSMonitor.cc +++ b/src/mon/MDSMonitor.cc @@ -349,7 +349,6 @@ bool MDSMonitor::prepare_beacon(MMDSBeacon *m) info.standby_for_rank = m->get_standby_for_rank(); info.standby_for_name = m->get_standby_for_name(); - if (!info.standby_for_name.empty()) { if (mdsmap.find_by_name(info.standby_for_name)) info.standby_for_rank = @@ -872,7 +871,7 @@ void MDSMonitor::tick() string name; while (pending_mdsmap.is_in(mds)) mds++; - uint64_t newgid = pending_mdsmap.find_unused_for(mds, name); + uint64_t newgid = pending_mdsmap.find_replacement_for(mds, name); if (!newgid) break; -- 2.39.5