"list all erasure code profiles", \
"osd", "r", "cli,rest")
COMMAND("osd set " \
- "name=key,type=CephChoices,strings=full|pause|noup|nodown|noout|noin|nobackfill|norebalance|norecover|noscrub|nodeep-scrub|notieragent|sortbitwise|require_jewel_osds|require_kraken_osds", \
+ "name=key,type=CephChoices,strings=full|pause|noup|nodown|noout|noin|nobackfill|norebalance|norecover|noscrub|nodeep-scrub|notieragent|sortbitwise|require_jewel_osds|require_kraken_osds|require_luminous_osds", \
"set <key>", "osd", "rw", "cli,rest")
COMMAND("osd unset " \
"name=key,type=CephChoices,strings=full|pause|noup|nodown|noout|noin|nobackfill|norebalance|norecover|noscrub|nodeep-scrub|notieragent|sortbitwise", \
// new clusters should sort bitwise by default.
newmap.set_flag(CEPH_OSDMAP_SORTBITWISE);
- // new cluster should require jewel and kraken by default
+ // new cluster should require latest by default
newmap.set_flag(CEPH_OSDMAP_REQUIRE_JEWEL);
newmap.set_flag(CEPH_OSDMAP_REQUIRE_KRAKEN);
+ newmap.set_flag(CEPH_OSDMAP_REQUIRE_LUMINOUS);
// encode into pending incremental
newmap.encode(pending_inc.fullmap,
tmp.apply_incremental(pending_inc);
// determine appropriate features
+ if (!tmp.test_flag(CEPH_OSDMAP_REQUIRE_LUMINOUS)) {
+ dout(10) << __func__ << " encoding without feature SERVER_LUMINOUS"
+ << dendl;
+ features &= ~CEPH_FEATURE_SERVER_LUMINOUS;
+ }
if (!tmp.test_flag(CEPH_OSDMAP_REQUIRE_JEWEL)) {
dout(10) << __func__ << " encoding without feature SERVER_JEWEL" << dendl;
features &= ~CEPH_FEATURE_SERVER_JEWEL;
goto ignore;
}
+ if (osdmap.test_flag(CEPH_OSDMAP_REQUIRE_LUMINOUS) &&
+ !HAVE_FEATURE(m->osd_features, SERVER_LUMINOUS)) {
+ mon->clog->info() << "disallowing boot of OSD "
+ << m->get_orig_source_inst()
+ << " because the osdmap requires"
+ << " CEPH_FEATURE_SERVER_LUMINOUS"
+ << " but the osd lacks CEPH_FEATURE_SERVER_LUMINOUS\n";
+ goto ignore;
+ }
+
if (osdmap.test_flag(CEPH_OSDMAP_REQUIRE_JEWEL) &&
!(m->osd_features & CEPH_FEATURE_SERVER_JEWEL)) {
mon->clog->info() << "disallowing boot of OSD "
}
// warn about upgrade flags that can be set but are not.
- if ((osdmap.get_up_osd_features() & CEPH_FEATURE_SERVER_KRAKEN) &&
+ if (HAVE_FEATURE(osdmap.get_up_osd_features(), SERVER_LUMINOUS) &&
+ !osdmap.test_flag(CEPH_OSDMAP_REQUIRE_LUMINOUS)) {
+ string msg = "all OSDs are running luminous or later but the"
+ " 'require_luminous_osds' osdmap flag is not set";
+ summary.push_back(make_pair(HEALTH_WARN, msg));
+ if (detail) {
+ detail->push_back(make_pair(HEALTH_WARN, msg));
+ }
+ } else if ((osdmap.get_up_osd_features() & CEPH_FEATURE_SERVER_KRAKEN) &&
!osdmap.test_flag(CEPH_OSDMAP_REQUIRE_KRAKEN)) {
string msg = "all OSDs are running kraken or later but the"
" 'require_kraken_osds' osdmap flag is not set";
ss << "not all up OSDs have CEPH_FEATURE_SERVER_KRAKEN feature";
err = -EPERM;
}
+ } else if (key == "require_luminous_osds") {
+ if (!osdmap.test_flag(CEPH_OSDMAP_SORTBITWISE)) {
+ ss << "the sortbitwise flag must be set before require_luminous_osds";
+ err = -EPERM;
+ } else if (HAVE_FEATURE(osdmap.get_up_osd_features(), SERVER_LUMINOUS)) {
+ bool r = prepare_set_flag(op, CEPH_OSDMAP_REQUIRE_LUMINOUS);
+ // ensure JEWEL and KRAKEN are also set
+ pending_inc.new_flags |= CEPH_OSDMAP_REQUIRE_JEWEL;
+ pending_inc.new_flags |= CEPH_OSDMAP_REQUIRE_KRAKEN;
+ return r;
+ } else {
+ ss << "not all up OSDs have CEPH_FEATURE_SERVER_LUMINOUS feature";
+ err = -EPERM;
+ }
} else {
ss << "unrecognized flag '" << key << "'";
err = -EINVAL;