This is the minimum release that is allowed to join the monitor cluster.
It is redundant with respect to the persistent_features (we have
one per release), which means that going forward we can phase those out.
Signed-off-by: Sage Weil <sage@redhat.com>
return;
}
- ENCODE_START(6, 6, blist);
+ ENCODE_START(7, 6, blist);
encode_raw(fsid, blist);
encode(epoch, blist);
encode(last_changed, blist);
encode(optional_features, blist);
encode(mon_info, blist, con_features);
encode(ranks, blist);
+ encode(min_mon_release, blist);
ENCODE_FINISH(blist);
}
void MonMap::decode(bufferlist::const_iterator& p)
{
map<string,entity_addr_t> mon_addr;
- DECODE_START_LEGACY_COMPAT_LEN_16(6, 3, 3, p);
+ DECODE_START_LEGACY_COMPAT_LEN_16(7, 3, 3, p);
decode_raw(fsid, p);
decode(epoch, p);
if (struct_v == 1) {
} else {
decode(ranks, p);
}
+ if (struct_v >= 7) {
+ decode(min_mon_release, p);
+ } else {
+ min_mon_release = infer_ceph_release_from_mon_features(persistent_features);
+ }
calc_addr_mons();
DECODE_FINISH(p);
}
out << "fsid " << fsid << "\n";
out << "last_changed " << last_changed << "\n";
out << "created " << created << "\n";
+ out << "min_mon_release " << (int)min_mon_release
+ << " (" << ceph_release_name(min_mon_release) << ")\n";
unsigned i = 0;
for (vector<string>::const_iterator p = ranks.begin();
p != ranks.end();
f->dump_stream("fsid") << fsid;
f->dump_stream("modified") << last_changed;
f->dump_stream("created") << created;
+ f->dump_unsigned("min_mon_release", min_mon_release);
+ f->dump_string("min_mon_release_name", ceph_release_name(min_mon_release));
f->open_object_section("features");
persistent_features.dump(f, "persistent");
optional_features.dump(f, "optional");
return (persistent_features | optional_features);
}
+ // upgrade gate
+ uint8_t min_mon_release = 0;
+
void _add_ambiguous_addr(const string& name,
entity_addr_t addr,
int priority,
}
}
+static inline int infer_ceph_release_from_mon_features(mon_feature_t f)
+{
+ if (f.contains_all(ceph::features::mon::FEATURE_NAUTILUS)) {
+ return CEPH_RELEASE_NAUTILUS;
+ }
+ if (f.contains_all(ceph::features::mon::FEATURE_MIMIC)) {
+ return CEPH_RELEASE_MIMIC;
+ }
+ if (f.contains_all(ceph::features::mon::FEATURE_LUMINOUS)) {
+ return CEPH_RELEASE_LUMINOUS;
+ }
+ if (f.contains_all(ceph::features::mon::FEATURE_KRAKEN)) {
+ return CEPH_RELEASE_KRAKEN;
+ }
+ return 0;
+}
+
static inline const char *ceph::features::mon::get_feature_name(uint64_t b) {
mon_feature_t f(b);
fsid [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} (re)
last_changed \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+ (re)
created \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+ (re)
+ min_mon_release 0 (unknown)
0: v1:2.3.4.5:6789/0 mon.foo
$ NEW_FSID="$(monmaptool --print mymonmap|grep ^fsid)"
fsid [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} (re)
last_changed \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+ (re)
created \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+ (re)
+ min_mon_release 0 (unknown)
0: v1:2.3.4.5:6789/0 mon.foo
1: [v2:172.21.15.68:6791/0,v1:172.21.15.68:6792/0] mon.fiz
2: v2:3.4.5.6:7890/0 mon.bar
fsid [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} (re)
last_changed \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+ (re)
created \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+ (re)
+ min_mon_release 0 (unknown)
0: v1:2.3.4.5:6789/0 mon.foo
$ NEW_FSID="$(monmaptool --print mymonmap|grep ^fsid)"
fsid [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} (re)
last_changed \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+ (re)
created \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+ (re)
+ min_mon_release 0 (unknown)
fsid [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} (re)
last_changed \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+ (re)
created \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+ (re)
+ min_mon_release 0 (unknown)
$ monmaptool --print -- mymonmap
monmaptool: monmap file mymonmap
fsid [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} (re)
last_changed \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+ (re)
created \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+ (re)
+ min_mon_release 0 (unknown)
fsid [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} (re)
last_changed \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+ (re)
created \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+ (re)
+ min_mon_release 0 (unknown)
0: v1:2.3.4.5:6789/0 mon.foo
fsid [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} (re)
last_changed \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+ (re)
created \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+ (re)
+ min_mon_release 0 (unknown)
0: v1:2.3.4.5:6789/0 mon.foo
$ NEW_FSID="$(monmaptool --print mymonmap|grep ^fsid)"
fsid [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} (re)
last_changed \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+ (re)
created \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+ (re)
+ min_mon_release 0 (unknown)
$ NEW_FSID="$(monmaptool --print mymonmap|grep ^fsid)"
$ [ "$ORIG_FSID" = "$NEW_FSID" ]