]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: rework assignment of standby-replay, expansion nodes
authorSage Weil <sage@newdream.net>
Tue, 26 Apr 2011 22:26:57 +0000 (15:26 -0700)
committerSage Weil <sage@newdream.net>
Tue, 26 Apr 2011 22:26:57 +0000 (15:26 -0700)
Signed-off-by: Sage Weil <sage@newdream.net>
src/mds/MDSMap.h
src/mon/MDSMonitor.cc

index 96e4363030708880fa7c224cb9ca4848617ff5d8..df9369f75d34ef103dbaade4c40124d677e4d1cf 100644 (file)
@@ -325,18 +325,14 @@ public:
     for (map<uint64_t,mds_info_t>::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<uint64_t,mds_info_t>::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;
       }
     }
index 4a299eed16c4175604b4aee1e3fca4a6983f2cd2..51d5a0bfd1708ed88651d15d304b514ef09dc2f9 100644 (file)
@@ -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;