From d341c5b7734b45568cd986f05d41e91e4cf4a4f7 Mon Sep 17 00:00:00 2001 From: Patrick Donnelly Date: Mon, 31 Jan 2022 17:58:55 -0500 Subject: [PATCH] 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 --- src/mds/FSMap.cc | 4 ++++ src/mds/MDSMap.cc | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/src/mds/FSMap.cc b/src/mds/FSMap.cc index 163a6c2f51e41..217a1e3307c54 100644 --- a/src/mds/FSMap.cc +++ b/src/mds/FSMap.cc @@ -1066,6 +1066,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 8aea8d0198254..3a417b02ab9b0 100644 --- a/src/mds/MDSMap.cc +++ b/src/mds/MDSMap.cc @@ -94,6 +94,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); @@ -931,6 +932,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; @@ -938,6 +943,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); -- 2.39.5