]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/OSDMap: require OSD features only of OSDs 13485/head
authorIlya Dryomov <idryomov@gmail.com>
Mon, 6 Feb 2017 11:51:05 +0000 (12:51 +0100)
committerShinobu Kinjo <shinobu@redhat.com>
Fri, 24 Feb 2017 00:49:44 +0000 (09:49 +0900)
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 <idryomov@gmail.com>
(cherry picked from commit ab558bbf2956157cbde59c155a5180a62ae73d07)

Conflicts:
src/osd/OSDMap.cc

src/osd/OSDMap.cc

index e2f0f5c1237dd1ee39ee48e92ac16882f30c672b..d673c4f348d4959b42b44d4817bb759b1e120070 100644 (file)
@@ -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;