From: Yan, Zheng Date: Mon, 11 Apr 2016 14:39:50 +0000 (+0800) Subject: mds: take standby_for_fscid into account in FSMap::find_unused() X-Git-Tag: v10.1.2~3^2^2^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F8536%2Fhead;p=ceph.git mds: take standby_for_fscid into account in FSMap::find_unused() Fixes: http://tracker.ceph.com/issues/15402 Signed-off-by: Yan, Zheng --- diff --git a/src/mds/FSMap.cc b/src/mds/FSMap.cc index 29f94dccbaae..349177820890 100644 --- a/src/mds/FSMap.cc +++ b/src/mds/FSMap.cc @@ -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 diff --git a/src/mds/FSMap.h b/src/mds/FSMap.h index 1f6b069df25f..16c5456cf76d 100644 --- a/src/mds/FSMap.h +++ b/src/mds/FSMap.h @@ -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;