Mon
---
-- [ ] qa/standalone/mon/misc adjust `TEST_mon_features` (add X cases and adjust `--mon-debug-no-require-X`)
+- [x] qa/standalone/mon/misc adjust `TEST_mon_features` (add X cases and adjust `--mon-debug-no-require-X`)
- [x] mon/MgrMonitor.cc adjust `always_on_modules`
-- [ ] common/options.cc define `mon_debug_no_require_X`
-- [ ] common/options.cc remove `mon_debug_no_require_X-2`
-- [ ] mon/OSDMonitor.cc `create_initial`: adjust new `require_osd_release`, and add associated `mon_debug_no_require_X`
-- [ ] mon/OSDMonitor.cc `preprocess_boot`: adjust "disallow boot of " condition to disallow X if `require_osd_release` < X-2.
-- [ ] mon/OSDMonitor.cc: adjust "osd require-osd-release" to (1) allow setting X, and (2) check that all mons *and* OSDs have X
-- [ ] mon/MonCommands.h: adjust "osd require-osd-release" allows options to include X
-- [ ] qa/workunits/cephtool/test.sh: adjust `require-osd-release` test
+- [x] common/options/global.yaml.in define `mon_debug_no_require_X`
+- [x] common/options/global.yaml.in remove `mon_debug_no_require_X-2`
+- [x] mon/OSDMonitor.cc `create_initial`: adjust new `require_osd_release`, and add associated `mon_debug_no_require_X`
+- [x] mon/OSDMonitor.cc `preprocess_boot`: adjust "disallow boot of " condition to disallow X if `require_osd_release` < X-2.
+- [x] mon/OSDMonitor.cc: adjust "osd require-osd-release" to (1) allow setting X, and (2) check that all mons *and* OSDs have X
+- [x] mon/MonCommands.h: adjust "osd require-osd-release" allows options to include X
+- [x] qa/workunits/cephtool/test.sh: adjust `require-osd-release` test
Code cleanup
CEPH_ARGS+="--mon-initial-members=a,b,c "
CEPH_ARGS+="--mon-host=$MONA,$MONB,$MONC "
CEPH_ARGS+="--mon-debug-no-initial-persistent-features "
- CEPH_ARGS+="--mon-debug-no-require-quincy "
+ CEPH_ARGS+="--mon-debug-no-require-reef "
run_mon $dir a --public-addr $MONA || return 1
run_mon $dir b --public-addr $MONB || return 1
jq_success "$jqinput" '.monmap.mons | length == 3' || return 1
# quorum contains two monitors
jq_success "$jqinput" '.quorum | length == 2' || return 1
- # quorum's monitor features contain kraken, luminous, mimic, nautilus, octopus, pacific
+ # quorum's monitor features contain kraken, luminous, mimic, nautilus,
+ # octopus, pacific, quincy
jqfilter='.features.quorum_mon[]|select(. == "kraken")'
jq_success "$jqinput" "$jqfilter" "kraken" || return 1
jqfilter='.features.quorum_mon[]|select(. == "luminous")'
jq_success "$jqinput" "$jqfilter" "pacific" || return 1
jqfilter='.features.quorum_mon[]|select(. == "quincy")'
jq_success "$jqinput" "$jqfilter" "quincy" || return 1
+ jqfilter='.features.quorum_mon[]|select(. == "reef")'
+ jq_success "$jqinput" "$jqfilter" "reef" || return 1
# monmap must have no persistent features set, because we
# don't currently have a quorum made out of all the monitors
# validate 'mon feature ls'
jqinput="$(ceph mon feature ls --format=json 2>/dev/null)"
- # k l m n o p are supported
+ # k l m n o p q are supported
jqfilter='.all.supported[] | select(. == "kraken")'
jq_success "$jqinput" "$jqfilter" "kraken" || return 1
jqfilter='.all.supported[] | select(. == "luminous")'
jq_success "$jqinput" "$jqfilter" "pacific" || return 1
jqfilter='.all.supported[] | select(. == "quincy")'
jq_success "$jqinput" "$jqfilter" "quincy" || return 1
+ jqfilter='.all.supported[] | select(. == "reef")'
+ jq_success "$jqinput" "$jqfilter" "reef" || return 1
# start third monitor
run_mon $dir c --public-addr $MONC || return 1
jq_success "$jqinput" "$jqfilter" || return 1
jqfilter='.monmap.features.persistent[]|select(. == "quincy")'
jq_success "$jqinput" "$jqfilter" "quincy" || return 1
+ jqfilter='.monmap.features.persistent[]|select(. == "reef")'
+ jq_success "$jqinput" "$jqfilter" "reef" || return 1
CEPH_ARGS=$CEPH_ARGS_orig
# that's all folks. thank you for tuning in.
expect_false ceph osd set $f
expect_false ceph osd unset $f
done
- ceph osd require-osd-release quincy
+ ceph osd require-osd-release reef
# can't lower
+ expect_false ceph osd require-osd-release quincy
expect_false ceph osd require-osd-release pacific
- expect_false ceph osd require-osd-release octopus
# these are no-ops but should succeed.
ceph osd set noup
see_also:
- mon_debug_dump_transactions
with_legacy: true
-- name: mon_debug_no_require_pacific
+- name: mon_debug_no_require_quincy
type: bool
level: dev
- desc: do not set pacific feature for new mon clusters
+ desc: do not set quincy feature for new mon clusters
default: false
services:
- mon
flags:
- cluster_create
-- name: mon_debug_no_require_quincy
+- name: mon_debug_no_require_reef
type: bool
level: dev
- desc: do not set quincy feature for new mon clusters
+ desc: do not set reef feature for new mon clusters
default: false
services:
- mon
"notieragent|nosnaptrim",
"unset <key>", "osd", "rw")
COMMAND("osd require-osd-release "\
- "name=release,type=CephChoices,strings=octopus|pacific|quincy "
+ "name=release,type=CephChoices,strings=octopus|pacific|quincy|reef "
"name=yes_i_really_mean_it,type=CephBool,req=false",
"set the minimum allowed OSD release to participate in the cluster",
"osd", "rw")
if (newmap.nearfull_ratio > 1.0) newmap.nearfull_ratio /= 100;
// new cluster should require latest by default
- if (g_conf().get_val<bool>("mon_debug_no_require_quincy")) {
- if (g_conf().get_val<bool>("mon_debug_no_require_pacific")) {
- derr << __func__ << " mon_debug_no_require_quincy and pacific=true" << dendl;
- newmap.require_osd_release = ceph_release_t::nautilus;
- } else {
- derr << __func__ << " mon_debug_no_require_quincy=true" << dendl;
+ if (g_conf().get_val<bool>("mon_debug_no_require_reef")) {
+ if (g_conf().get_val<bool>("mon_debug_no_require_quincy")) {
+ derr << __func__ << " mon_debug_no_require_reef and quincy=true" << dendl;
newmap.require_osd_release = ceph_release_t::pacific;
+ } else {
+ derr << __func__ << " mon_debug_no_require_reef=true" << dendl;
+ newmap.require_osd_release = ceph_release_t::quincy;
}
} else {
- newmap.require_osd_release = ceph_release_t::quincy;
+ newmap.require_osd_release = ceph_release_t::reef;
}
ceph_release_t r = ceph_release_from_name(g_conf()->mon_osd_initial_require_min_compat_client);
ceph_assert(m->get_orig_source_inst().name.is_osd());
// lower bound of N-2
- if (!HAVE_FEATURE(m->osd_features, SERVER_OCTOPUS)) {
+ if (!HAVE_FEATURE(m->osd_features, SERVER_PACIFIC)) {
mon.clog->info() << "disallowing boot of OSD "
<< m->get_orig_source_inst()
- << " because the osd lacks CEPH_FEATURE_SERVER_OCTOPUS";
+ << " because the osd lacks CEPH_FEATURE_SERVER_PACIFIC";
goto ignore;
}
// make sure osd versions do not span more than 3 releases
- if (HAVE_FEATURE(m->osd_features, SERVER_PACIFIC) &&
- osdmap.require_osd_release < ceph_release_t::nautilus) {
- mon.clog->info() << "disallowing boot of pacific+ OSD "
- << m->get_orig_source_inst()
- << " because require_osd_release < nautilus";
- goto ignore;
- }
if (HAVE_FEATURE(m->osd_features, SERVER_QUINCY) &&
osdmap.require_osd_release < ceph_release_t::octopus) {
mon.clog->info() << "disallowing boot of quincy+ OSD "
<< " because require_osd_release < octopus";
goto ignore;
}
+ if (HAVE_FEATURE(m->osd_features, SERVER_REEF) &&
+ osdmap.require_osd_release < ceph_release_t::pacific) {
+ mon.clog->info() << "disallowing boot of reef+ OSD "
+ << m->get_orig_source_inst()
+ << " because require_osd_release < pacific";
+ goto ignore;
+ }
if (osdmap.stretch_mode_enabled &&
!(m->osd_features & CEPH_FEATUREMASK_STRETCH_MODE)) {
err = 0;
goto reply;
}
- ceph_assert(osdmap.require_osd_release >= ceph_release_t::octopus);
+ ceph_assert(osdmap.require_osd_release >= ceph_release_t::pacific);
if (!osdmap.get_num_up_osds() && !sure) {
ss << "Not advisable to continue since no OSDs are up. Pass "
<< "--yes-i-really-mean-it if you really wish to continue.";
err = -EPERM;
goto reply;
}
- if (rel == ceph_release_t::octopus) {
- if (!mon.monmap->get_required_features().contains_all(
- ceph::features::mon::FEATURE_OCTOPUS)) {
- ss << "not all mons are octopus";
- err = -EPERM;
- goto reply;
- }
- if ((!HAVE_FEATURE(osdmap.get_up_osd_features(), SERVER_OCTOPUS))
- && !sure) {
- ss << "not all up OSDs have CEPH_FEATURE_SERVER_OCTOPUS feature";
- err = -EPERM;
- goto reply;
- }
- } else if (rel == ceph_release_t::pacific) {
+ if (rel == ceph_release_t::pacific) {
if (!mon.monmap->get_required_features().contains_all(
ceph::features::mon::FEATURE_PACIFIC)) {
ss << "not all mons are pacific";
err = -EPERM;
goto reply;
}
+ } else if (rel == ceph_release_t::reef) {
+ if (!mon.monmap->get_required_features().contains_all(
+ ceph::features::mon::FEATURE_REEF)) {
+ ss << "not all mons are reef";
+ err = -EPERM;
+ goto reply;
+ }
+ if ((!HAVE_FEATURE(osdmap.get_up_osd_features(), SERVER_REEF))
+ && !sure) {
+ ss << "not all up OSDs have CEPH_FEATURE_SERVER_REEF feature";
+ err = -EPERM;
+ goto reply;
+ }
} else {
ss << "not supported for this release";
err = -EPERM;