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: v18.0.0~1438^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=d341c5b7734b45568cd986f05d41e91e4cf4a4f7;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 --- 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);