Misc
~~~~
- [x] update src/ceph-volume/ceph_volume/__init__.py (__release__)
+
+Feature bits
+------------
+
+- [ ] ensure that SERVER_X is defined
+- [ ]
+
+
+Compatsets
+----------
+
+- [x] mon/Monitor.h (CEPH_MON_FEATURE_INCOMPAT_X)
+- [x] mon/Monitor.cc (include in get_supported_features)
+- [x] mon/Monitor.cc (apply_monmap_to_compatset_features())
+- [x] mon/Monitor.cc (calc_quorum_requirements())
+
compat.incompat.insert(CEPH_MON_FEATURE_INCOMPAT_MIMIC);
compat.incompat.insert(CEPH_MON_FEATURE_INCOMPAT_NAUTILUS);
compat.incompat.insert(CEPH_MON_FEATURE_INCOMPAT_OCTOPUS);
+ compat.incompat.insert(CEPH_MON_FEATURE_INCOMPAT_PACIFIC);
return compat;
}
ceph_assert(HAVE_FEATURE(quorum_con_features, SERVER_OCTOPUS));
new_features.incompat.insert(CEPH_MON_FEATURE_INCOMPAT_OCTOPUS);
}
+ if (monmap_features.contains_all(ceph::features::mon::FEATURE_PACIFIC)) {
+ ceph_assert(ceph::features::mon::get_persistent().contains_all(
+ ceph::features::mon::FEATURE_PACIFIC));
+ // this feature should only ever be set if the quorum supports it.
+ ceph_assert(HAVE_FEATURE(quorum_con_features, SERVER_PACIFIC));
+ new_features.incompat.insert(CEPH_MON_FEATURE_INCOMPAT_PACIFIC);
+ }
dout(5) << __func__ << dendl;
_apply_compatset_features(new_features);
if (features.incompat.contains(CEPH_MON_FEATURE_INCOMPAT_OCTOPUS)) {
required_features |= CEPH_FEATUREMASK_SERVER_OCTOPUS;
}
+ if (features.incompat.contains(CEPH_MON_FEATURE_INCOMPAT_PACIFIC)) {
+ required_features |= CEPH_FEATUREMASK_SERVER_PACIFIC;
+ }
// monmap
if (monmap->get_required_features().contains_all(
#define CEPH_MON_FEATURE_INCOMPAT_MIMIC CompatSet::Feature(10, "mimic ondisk layout")
#define CEPH_MON_FEATURE_INCOMPAT_NAUTILUS CompatSet::Feature(11, "nautilus ondisk layout")
#define CEPH_MON_FEATURE_INCOMPAT_OCTOPUS CompatSet::Feature(12, "octopus ondisk layout")
+#define CEPH_MON_FEATURE_INCOMPAT_PACIFIC CompatSet::Feature(13, "pacific ondisk layout")
// make sure you add your feature to Monitor::get_supported_features