]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: take standby_for_fscid into account in FSMap::find_unused() 8536/head
authorYan, Zheng <zyan@redhat.com>
Mon, 11 Apr 2016 14:39:50 +0000 (22:39 +0800)
committerYan, Zheng <zyan@redhat.com>
Mon, 11 Apr 2016 14:43:25 +0000 (22:43 +0800)
Fixes: http://tracker.ceph.com/issues/15402
Signed-off-by: Yan, Zheng <zyan@redhat.com>
src/mds/FSMap.cc
src/mds/FSMap.h

index 29f94dccbaae30e0c0a52a63304c25e3b2059265..349177820890ad8ebe052caad62a08afb510689a 100644 (file)
@@ -512,7 +512,8 @@ mds_gid_t FSMap::find_standby_for(mds_role_t role, const std::string& name) cons
   return result;
 }
 
-mds_gid_t FSMap::find_unused(bool force_standby_active) const {
+mds_gid_t FSMap::find_unused(fs_cluster_id_t fscid,
+                            bool force_standby_active) const {
   for (const auto &i : standby_daemons) {
     const auto &gid = i.first;
     const auto &info = i.second;
@@ -521,6 +522,10 @@ mds_gid_t FSMap::find_unused(bool force_standby_active) const {
     if (info.laggy() || info.rank >= 0)
       continue;
 
+    if (info.standby_for_fscid != FS_CLUSTER_ID_NONE &&
+        info.standby_for_fscid != fscid)
+      continue;
+
     if ((info.standby_for_rank == MDSMap::MDS_NO_STANDBY_PREF ||
          info.standby_for_rank == MDSMap::MDS_MATCHED_ACTIVE ||
          (info.standby_for_rank == MDSMap::MDS_STANDBY_ANY
@@ -537,7 +542,7 @@ mds_gid_t FSMap::find_replacement_for(mds_role_t role, const std::string& name,
   if (standby)
     return standby;
   else
-    return find_unused(force_standby_active);
+    return find_unused(role.fscid, force_standby_active);
 }
 
 void FSMap::sanity() const
index 1f6b069df25f2f983a2450cd779f1ca93d96c5cb..16c5456cf76d432a625f0a8970e74b6e00c921eb 100644 (file)
@@ -411,7 +411,7 @@ public:
 
   mds_gid_t find_standby_for(mds_role_t mds, const std::string& name) const;
 
-  mds_gid_t find_unused(bool force_standby_active) const;
+  mds_gid_t find_unused(fs_cluster_id_t fscid, bool force_standby_active) const;
 
   mds_gid_t find_replacement_for(mds_role_t mds, const std::string& name,
                                  bool force_standby_active) const;