#define CEPH_FEATURE_MON_STATEFUL_SUB (1ULL<<57) /* stateful mon subscription */
#define CEPH_FEATURE_MON_ROUTE_OSDMAP (1ULL<<57) /* peon sends osdmaps */
#define CEPH_FEATURE_OSDSUBOP_NO_SNAPCONTEXT (1ULL<<57) /* overlap, drop unused SnapContext in v12 */
+#define CEPH_FEATURE_SERVER_JEWEL (1ULL<<57) /* overlap, features introduced in jewel */
#define CEPH_FEATURE_CRUSH_TUNABLES5 (1ULL<<58) /* chooseleaf stable mode */
// duplicated since it was introduced at the same time as CEPH_FEATURE_CRUSH_TUNABLES5
#define CEPH_FEATURE_NEW_OSDOPREPLY_ENCODING (1ULL<<58) /* New, v7 encoding */
CEPH_FEATURE_MON_STATEFUL_SUB | \
CEPH_FEATURE_MON_ROUTE_OSDMAP | \
CEPH_FEATURE_CRUSH_TUNABLES5 | \
+ CEPH_FEATURE_SERVER_JEWEL | \
0ULL)
#define CEPH_FEATURES_SUPPORTED_DEFAULT CEPH_FEATURES_ALL
#define CEPH_OSDMAP_NOTIERAGENT (1<<13) /* disable tiering agent */
#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 */
/*
* 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
+ newmap.set_flag(CEPH_OSDMAP_REQUIRE_JEWEL);
+
// encode into pending incremental
newmap.encode(pending_inc.fullmap, mon->quorum_features | CEPH_FEATURE_RESERVED);
pending_inc.full_crc = newmap.get_crc();
goto ignore;
}
+ if (osdmap.test_flag(CEPH_OSDMAP_REQUIRE_JEWEL) &&
+ !(m->get_connection()->get_features() & CEPH_FEATURE_SERVER_JEWEL)) {
+ mon->clog->info() << "disallowing boot of OSD "
+ << m->get_orig_source_inst()
+ << " because the osdmap requires"
+ << " CEPH_FEATURE_SERVER_JEWEL"
+ << " but the osd lacks CEPH_FEATURE_SERVER_JEWEL\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 OSD_BITWISE_HOBJ_SORT feature";
err = -EPERM;
}
+ } else if (key == "require_jewel_osds") {
+ if (osdmap.get_up_osd_features() & CEPH_FEATURE_SERVER_JEWEL) {
+ return prepare_set_flag(op, CEPH_OSDMAP_REQUIRE_JEWEL);
+ } else {
+ ss << "not all up OSDs have CEPH_FEATURE_SERVER_JEWEL feature";
+ err = -EPERM;
+ }
} else {
ss << "unrecognized flag '" << key << "'";
err = -EINVAL;