From b2e369234705ae78774261c62081729e6a50e8e5 Mon Sep 17 00:00:00 2001 From: Ilya Dryomov Date: Mon, 6 Feb 2017 12:51:05 +0100 Subject: [PATCH] osd/OSDMap: require OSD features only of OSDs Fix up commit 1a5cc32f0a3b ("osd/OSDMap: reflect REQUIRE_*_OSDS flag in required features") -- require_*_osds shouldn't affect older clients. Fixes: http://tracker.ceph.com/issues/18831 Signed-off-by: Ilya Dryomov (cherry picked from commit ab558bbf2956157cbde59c155a5180a62ae73d07) Conflicts: src/osd/OSDMap.cc --- src/osd/OSDMap.cc | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/osd/OSDMap.cc b/src/osd/OSDMap.cc index e2f0f5c1237dd..d673c4f348d49 100644 --- a/src/osd/OSDMap.cc +++ b/src/osd/OSDMap.cc @@ -1094,6 +1094,21 @@ uint64_t OSDMap::get_features(int entity_type, uint64_t *pmask) const } mask |= CEPH_FEATURE_OSD_PRIMARY_AFFINITY; + if (entity_type == CEPH_ENTITY_TYPE_OSD) { + const uint64_t jewel_features = CEPH_FEATURE_SERVER_JEWEL; + if (test_flag(CEPH_OSDMAP_REQUIRE_JEWEL)) { + features |= jewel_features; + } + mask |= jewel_features; + + const uint64_t kraken_features = CEPH_FEATURE_SERVER_KRAKEN + | CEPH_FEATURE_MSG_ADDR2; + if (test_flag(CEPH_OSDMAP_REQUIRE_KRAKEN)) { + features |= kraken_features; + } + mask |= kraken_features; + } + if (pmask) *pmask = mask; return features; -- 2.39.5