From 9b8e3187ed491e4bcfdecbc82babb0bca835bad6 Mon Sep 17 00:00:00 2001 From: Patrick Donnelly Date: Mon, 8 Nov 2021 19:37:19 -0500 Subject: [PATCH] mds/FSMap: allow upgrade when no MDS is "in" Fixes: https://tracker.ceph.com/issues/52975 Signed-off-by: Patrick Donnelly --- src/mds/FSMap.cc | 10 +++++----- src/mds/FSMap.h | 3 ++- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/mds/FSMap.cc b/src/mds/FSMap.cc index e258cc139ada4..8c1cdfbc0fc76 100644 --- a/src/mds/FSMap.cc +++ b/src/mds/FSMap.cc @@ -933,6 +933,11 @@ void FSMap::promote( } auto& info = mds_map.mds_info.at(standby_gid); + if (!filesystem.mds_map.compat.writeable(info.compat)) { + ceph_assert(filesystem.is_upgradeable()); + filesystem.mds_map.compat.merge(info.compat); + } + if (mds_map.stopped.erase(assigned_rank)) { // The cluster is being expanded with a stopped rank info.state = MDSMap::STATE_STARTING; @@ -958,11 +963,6 @@ void FSMap::promote( standby_epochs.erase(standby_gid); } - if (!filesystem.mds_map.compat.writeable(info.compat)) { - ceph_assert(filesystem.is_upgradeable()); - filesystem.mds_map.compat.merge(info.compat); - } - // Indicate that Filesystem has been modified mds_map.epoch = epoch; } diff --git a/src/mds/FSMap.h b/src/mds/FSMap.h index 197d5141c17d5..099c1337ceb86 100644 --- a/src/mds/FSMap.h +++ b/src/mds/FSMap.h @@ -189,7 +189,8 @@ public: void print(std::ostream& out) const; bool is_upgradeable() const { - return !mds_map.allows_standby_replay() && mds_map.get_num_in_mds() <= 1; + return (mds_map.allows_standby_replay() && mds_map.get_num_in_mds() == 0) + || (!mds_map.allows_standby_replay() && mds_map.get_num_in_mds() <= 1); } /** -- 2.39.5