.set_flag(Option::FLAG_CLUSTER_CREATE)
.set_description(""),
+ Option("mon_debug_no_require_nautilus", Option::TYPE_BOOL, Option::LEVEL_DEV)
+ .set_default(false)
+ .set_flag(Option::FLAG_CLUSTER_CREATE)
+ .set_description(""),
+
Option("mon_debug_no_require_bluestore_for_ec_overwrites", Option::TYPE_BOOL, Option::LEVEL_DEV)
.set_default(false)
.set_description(""),
CEPH_FEATURE_OSD_RECOVERY_DELETES | \
CEPH_FEATURE_SERVER_MIMIC | \
CEPH_FEATURE_RECOVERY_RESERVATION_2 | \
+ CEPH_FEATURE_SERVER_NAUTILUS | \
0ULL)
#define CEPH_FEATURES_SUPPORTED_DEFAULT CEPH_FEATURES_ALL
compat.incompat.insert(CEPH_MON_FEATURE_INCOMPAT_KRAKEN);
compat.incompat.insert(CEPH_MON_FEATURE_INCOMPAT_LUMINOUS);
compat.incompat.insert(CEPH_MON_FEATURE_INCOMPAT_MIMIC);
+ compat.incompat.insert(CEPH_MON_FEATURE_INCOMPAT_NAUTILUS);
return compat;
}
assert(HAVE_FEATURE(quorum_con_features, SERVER_MIMIC));
new_features.incompat.insert(CEPH_MON_FEATURE_INCOMPAT_MIMIC);
}
+ if (monmap_features.contains_all(ceph::features::mon::FEATURE_NAUTILUS)) {
+ assert(ceph::features::mon::get_persistent().contains_all(
+ ceph::features::mon::FEATURE_NAUTILUS));
+ // this feature should only ever be set if the quorum supports it.
+ assert(HAVE_FEATURE(quorum_con_features, SERVER_NAUTILUS));
+ new_features.incompat.insert(CEPH_MON_FEATURE_INCOMPAT_NAUTILUS);
+ }
dout(5) << __func__ << dendl;
_apply_compatset_features(new_features);
if (features.incompat.contains(CEPH_MON_FEATURE_INCOMPAT_MIMIC)) {
required_features |= CEPH_FEATUREMASK_SERVER_MIMIC;
}
+ if (features.incompat.contains(CEPH_MON_FEATURE_INCOMPAT_NAUTILUS)) {
+ required_features |= CEPH_FEATUREMASK_SERVER_NAUTILUS;
+ }
// monmap
if (monmap->get_required_features().contains_all(
ceph::features::mon::FEATURE_MIMIC)) {
required_features |= CEPH_FEATUREMASK_SERVER_MIMIC;
}
+ if (monmap->get_required_features().contains_all(
+ ceph::features::mon::FEATURE_NAUTILUS)) {
+ required_features |= CEPH_FEATUREMASK_SERVER_NAUTILUS;
+ }
dout(10) << __func__ << " required_features " << required_features << dendl;
}
#define CEPH_MON_FEATURE_INCOMPAT_KRAKEN CompatSet::Feature(8, "support monmap features")
#define CEPH_MON_FEATURE_INCOMPAT_LUMINOUS CompatSet::Feature(9, "luminous ondisk layout")
#define CEPH_MON_FEATURE_INCOMPAT_MIMIC CompatSet::Feature(10, "mimic ondisk layout")
+#define CEPH_MON_FEATURE_INCOMPAT_NAUTILUS CompatSet::Feature(11, "nautilus ondisk layout")
// make sure you add your feature to Monitor::get_supported_features
if (newmap.nearfull_ratio > 1.0) newmap.nearfull_ratio /= 100;
// new cluster should require latest by default
- if (g_conf->mon_debug_no_require_mimic) {
- newmap.require_osd_release = CEPH_RELEASE_LUMINOUS;
- derr << __func__ << " mon_debug_no_require_mimic=true" << dendl;
+ if (g_conf->get_val<bool>("mon_debug_no_require_nautilus")) {
+ if (g_conf->mon_debug_no_require_mimic) {
+ derr << __func__ << " mon_debug_no_require_mimic=true and nautilus=true" << dendl;
+ newmap.require_osd_release = CEPH_RELEASE_LUMINOUS;
+ } else {
+ derr << __func__ << " mon_debug_no_require_nautilus=true" << dendl;
+ newmap.require_osd_release = CEPH_RELEASE_MIMIC;
+ }
} else {
- newmap.require_osd_release = CEPH_RELEASE_MIMIC;
+ newmap.require_osd_release = CEPH_RELEASE_NAUTILUS;
int r = ceph_release_from_name(
g_conf->mon_osd_initial_require_min_compat_client.c_str());
if (r <= 0) {
// upgrade to mimic?
if (osdmap.require_osd_release < CEPH_RELEASE_MIMIC &&
tmp.require_osd_release >= CEPH_RELEASE_MIMIC) {
- dout(10) << __func__ << " first mimic epoch" << dendl;
+ dout(10) << __func__ << " first mimic+ epoch" << dendl;
// record this epoch as the deletion for all legacy removed_snaps
for (auto& p : tmp.get_pools()) {
// update every pool
}
}
}
+ if (osdmap.require_osd_release < CEPH_RELEASE_NAUTILUS &&
+ tmp.require_osd_release >= CEPH_RELEASE_NAUTILUS) {
+ dout(10) << __func__ << " first nautilus+ epoch" << dendl;
+ }
}
// tell me about it
// create message handling path in the OSD still does the old thing where
// the pg history is pregenerated and it's instantiated at the latest osdmap
// epoch; child pgs are simply not created.
- bool old = true; // !HAVE_FEATURE(con->get_features(), SERVER_MIMIC);
+ bool old = true; // !HAVE_FEATURE(con->get_features(), SERVER_NAUTILUS);
epoch_t last = 0;
for (auto epoch_pgs = creating_pgs_by_epoch->second.lower_bound(next);
goto reply;
}
assert(osdmap.require_osd_release >= CEPH_RELEASE_LUMINOUS);
+ if (!osdmap.get_num_up_osds() && sure != "--yes-i-really-mean-it") {
+ 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_MIMIC) {
- if (!osdmap.get_num_up_osds() && sure != "--yes-i-really-mean-it") {
- 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 ((!HAVE_FEATURE(osdmap.get_up_osd_features(), SERVER_MIMIC))
&& sure != "--yes-i-really-mean-it") {
ss << "not all up OSDs have CEPH_FEATURE_SERVER_MIMIC feature";
err = -EPERM;
goto reply;
}
+ } else if (rel == CEPH_RELEASE_NAUTILUS) {
+ if ((!HAVE_FEATURE(osdmap.get_up_osd_features(), SERVER_NAUTILUS))
+ && sure != "--yes-i-really-mean-it") {
+ ss << "not all up OSDs have CEPH_FEATURE_SERVER_NAUTILUS feature";
+ err = -EPERM;
+ goto reply;
+ }
} else {
ss << "not supported for this release yet";
err = -EPERM;
constexpr mon_feature_t FEATURE_LUMINOUS( (1ULL << 1));
constexpr mon_feature_t FEATURE_MIMIC( (1ULL << 2));
constexpr mon_feature_t FEATURE_OSDMAP_PRUNE (1ULL << 3);
+ constexpr mon_feature_t FEATURE_NAUTILUS( (1ULL << 4));
constexpr mon_feature_t FEATURE_RESERVED( (1ULL << 63));
constexpr mon_feature_t FEATURE_NONE( (0ULL));
FEATURE_LUMINOUS |
FEATURE_MIMIC |
FEATURE_OSDMAP_PRUNE |
+ FEATURE_NAUTILUS |
FEATURE_NONE
);
}
FEATURE_KRAKEN |
FEATURE_LUMINOUS |
FEATURE_MIMIC |
+ FEATURE_NAUTILUS |
FEATURE_OSDMAP_PRUNE |
FEATURE_NONE
);
return "mimic";
} else if (f == FEATURE_OSDMAP_PRUNE) {
return "osdmap-prune";
+ } else if (f == FEATURE_NAUTILUS) {
+ return "nautilus";
} else if (f == FEATURE_RESERVED) {
return "reserved";
}
return FEATURE_MIMIC;
} else if (n == "osdmap-prune") {
return FEATURE_OSDMAP_PRUNE;
+ } else if (n == "nautilus") {
+ return FEATURE_NAUTILUS;
} else if (n == "reserved") {
return FEATURE_RESERVED;
}