diff options
Diffstat (limited to 'src/osd/OSDMap.cc')
-rw-r--r-- | src/osd/OSDMap.cc | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/osd/OSDMap.cc b/src/osd/OSDMap.cc index 5fb73084d..6468e605c 100644 --- a/src/osd/OSDMap.cc +++ b/src/osd/OSDMap.cc @@ -1747,9 +1747,12 @@ uint64_t OSDMap::get_features(int entity_type, uint64_t *pmask) const } mask |= CEPH_FEATURES_CRUSH; - if (!pg_upmap.empty() || !pg_upmap_items.empty() || !pg_upmap_primaries.empty()) + if (!pg_upmap.empty() || !pg_upmap_items.empty()) features |= CEPH_FEATUREMASK_OSDMAP_PG_UPMAP; mask |= CEPH_FEATUREMASK_OSDMAP_PG_UPMAP; + if (!pg_upmap_primaries.empty()) + features |= CEPH_FEATUREMASK_SERVER_REEF; + mask |= CEPH_FEATUREMASK_SERVER_REEF; for (auto &pool: pools) { if (pool.second.has_flag(pg_pool_t::FLAG_HASHPSPOOL)) { @@ -1821,6 +1824,9 @@ ceph_release_t OSDMap::get_min_compat_client() const { uint64_t f = get_features(CEPH_ENTITY_TYPE_CLIENT, nullptr); + if (HAVE_FEATURE(f, SERVER_REEF)) { // v18.2.3 (upmap-primary; see #61948) + return ceph_release_t::reef; + } if (HAVE_FEATURE(f, OSDMAP_PG_UPMAP) || // v12.0.0-1733-g27d6f43 HAVE_FEATURE(f, CRUSH_CHOOSE_ARGS)) { // v12.0.1-2172-gef1ef28 return ceph_release_t::luminous; // v12.2.0 |