From: Patrick Donnelly Date: Mon, 31 Jan 2022 22:58:55 +0000 (-0500) Subject: mds: add inline feature to MDS bootstrap incompat X-Git-Tag: v16.2.8~153^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=089c84ce2b2c96352e2dd5ea8714131a9cb8c471;p=ceph.git mds: add inline feature to MDS bootstrap incompat File systems that had inline data enabled at some point would have this bit in the CompatSet "incompat" set. This would conflict during upgrade with the default v16.2.4 CompatSet assigned to existing (16.2.4-) MDS. Subsequently, this would cause an assertion in FSMap::sanity during pending map creation. This bit will get added anyway during the upgrade process so might as well add it to the MDS CompatSet during bootstrap. Fixes: https://tracker.ceph.com/issues/54081 Signed-off-by: Patrick Donnelly (cherry picked from commit d341c5b7734b45568cd986f05d41e91e4cf4a4f7) --- diff --git a/src/mds/FSMap.cc b/src/mds/FSMap.cc index 1fd993dcadd2..89de8bb82e03 100644 --- a/src/mds/FSMap.cc +++ b/src/mds/FSMap.cc @@ -1056,6 +1056,10 @@ void FSMap::insert(const MDSMap::mds_info_t &new_info) // or older) MDS. info.compat = MDSMap::get_compat_set_v16_2_4(); } + /* TODO remove after R is released + * Insert INLINE; see comment in MDSMap::decode. + */ + info.compat.incompat.insert(MDS_FEATURE_INCOMPAT_INLINE); standby_epochs[new_info.global_id] = epoch; } diff --git a/src/mds/MDSMap.cc b/src/mds/MDSMap.cc index 9de050e3e811..70214658ed68 100644 --- a/src/mds/MDSMap.cc +++ b/src/mds/MDSMap.cc @@ -93,6 +93,7 @@ CompatSet MDSMap::get_compat_set_v16_2_4() { feature_incompat.insert(MDS_FEATURE_INCOMPAT_DIRINODE); feature_incompat.insert(MDS_FEATURE_INCOMPAT_ENCODING); feature_incompat.insert(MDS_FEATURE_INCOMPAT_OMAPDIRFRAG); + feature_incompat.insert(MDS_FEATURE_INCOMPAT_INLINE); feature_incompat.insert(MDS_FEATURE_INCOMPAT_NOANCHOR); feature_incompat.insert(MDS_FEATURE_INCOMPAT_FILE_LAYOUT_V2); feature_incompat.insert(MDS_FEATURE_INCOMPAT_SNAPREALM_V2); @@ -906,6 +907,10 @@ void MDSMap::decode(bufferlist::const_iterator& p) } } + /* All MDS since at least v14.0.0 understand INLINE */ + /* TODO: remove after R is released */ + compat.incompat.insert(MDS_FEATURE_INCOMPAT_INLINE); + for (auto& p: mds_info) { static const CompatSet empty; auto& info = p.second; @@ -913,6 +918,9 @@ void MDSMap::decode(bufferlist::const_iterator& p) /* bootstrap old compat; mds_info_t::decode does not have access to MDSMap */ info.compat = compat; } + /* All MDS since at least v14.0.0 understand INLINE */ + /* TODO: remove after R is released */ + info.compat.incompat.insert(MDS_FEATURE_INCOMPAT_INLINE); } DECODE_FINISH(p);