#define CEPH_FEATURE_PGPOOL3 (1ULL<<11)
#define CEPH_FEATURE_OSDREPLYMUX (1ULL<<12)
#define CEPH_FEATURE_OSDENC (1ULL<<13)
-// UNUSED: (1ULL<<14)
+#define CEPH_FEATURE_SERVER_KRAKEN (1ULL<<14) // REUSED
#define CEPH_FEATURE_MONENC (1ULL<<15)
#define DEPRECATED_CEPH_FEATURE_QUERY_T (1ULL<<16) // DEPRECATED: JEWEL
#define DEPRECATED_CEPH_FEATURE_INDEP_PG_MAP (1ULL<<17) // DEPRECATED: JEWEL
CEPH_FEATURE_CRUSH_TUNABLES5 | \
CEPH_FEATURE_SERVER_JEWEL | \
CEPH_FEATURE_FS_FILE_LAYOUT_V2 | \
+ CEPH_FEATURE_SERVER_KRAKEN | \
0ULL)
#define CEPH_FEATURES_SUPPORTED_DEFAULT CEPH_FEATURES_ALL
#define CEPH_OSDMAP_NOREBALANCE (1<<14) /* block osd backfill unless pg is degraded */
#define CEPH_OSDMAP_SORTBITWISE (1<<15) /* use bitwise hobject_t sort */
#define CEPH_OSDMAP_REQUIRE_JEWEL (1<<16) /* require jewel for booting osds */
+#define CEPH_OSDMAP_REQUIRE_KRAKEN (1<<17) /* require kraken for booting osds */
/*
* The error code to return when an OSD can't handle a write
// new clusters should sort bitwise by default.
newmap.set_flag(CEPH_OSDMAP_SORTBITWISE);
- // new cluster should require jewel by default
+ // new cluster should require jewel and kraken by default
newmap.set_flag(CEPH_OSDMAP_REQUIRE_JEWEL);
+ newmap.set_flag(CEPH_OSDMAP_REQUIRE_KRAKEN);
// encode into pending incremental
newmap.encode(pending_inc.fullmap, mon->quorum_features | CEPH_FEATURE_RESERVED);
goto ignore;
}
+ if (osdmap.test_flag(CEPH_OSDMAP_REQUIRE_KRAKEN) &&
+ !(m->osd_features & CEPH_FEATURE_SERVER_KRAKEN)) {
+ mon->clog->info() << "disallowing boot of OSD "
+ << m->get_orig_source_inst()
+ << " because the osdmap requires"
+ << " CEPH_FEATURE_SERVER_KRAKEN"
+ << " but the osd lacks CEPH_FEATURE_SERVER_KRAKEN\n";
+ goto ignore;
+ }
+
if (osdmap.test_flag(CEPH_OSDMAP_SORTBITWISE) &&
!(m->osd_features & CEPH_FEATURE_OSD_BITWISE_HOBJ_SORT)) {
mon->clog->info() << "disallowing boot of OSD "
ss << "not all up OSDs have CEPH_FEATURE_SERVER_JEWEL feature";
err = -EPERM;
}
+ } else if (key == "require_kraken_osds") {
+ if (osdmap.get_up_osd_features() & CEPH_FEATURE_SERVER_KRAKEN) {
+ return prepare_set_flag(op, CEPH_OSDMAP_REQUIRE_KRAKEN);
+ } else {
+ ss << "not all up OSDs have CEPH_FEATURE_SERVER_KRAKEN feature";
+ err = -EPERM;
+ }
} else {
ss << "unrecognized flag '" << key << "'";
err = -EINVAL;