From: Sage Weil Date: Tue, 29 Jan 2019 18:49:56 +0000 (-0600) Subject: mon/MonMap: add min_mon_release field X-Git-Tag: v14.1.0~94^2~10 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=4744cbb7deeb11d2ccc2e5f7982d0761b3afe400;p=ceph.git mon/MonMap: add min_mon_release field 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 --- diff --git a/src/mon/MonMap.cc b/src/mon/MonMap.cc index 0d25f72b5062..90330a1dab38 100644 --- a/src/mon/MonMap.cc +++ b/src/mon/MonMap.cc @@ -168,7 +168,7 @@ void MonMap::encode(bufferlist& blist, uint64_t con_features) const return; } - ENCODE_START(6, 6, blist); + ENCODE_START(7, 6, blist); encode_raw(fsid, blist); encode(epoch, blist); encode(last_changed, blist); @@ -177,13 +177,14 @@ void MonMap::encode(bufferlist& blist, uint64_t con_features) const 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 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) { @@ -220,6 +221,11 @@ void MonMap::decode(bufferlist::const_iterator& p) } 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); } @@ -306,6 +312,8 @@ void MonMap::print(ostream& out) const 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::const_iterator p = ranks.begin(); p != ranks.end(); @@ -320,6 +328,8 @@ void MonMap::dump(Formatter *f) const 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"); diff --git a/src/mon/MonMap.h b/src/mon/MonMap.h index ee3d06338ded..f9a043a0335c 100644 --- a/src/mon/MonMap.h +++ b/src/mon/MonMap.h @@ -131,6 +131,9 @@ class MonMap { 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, diff --git a/src/mon/mon_types.h b/src/mon/mon_types.h index ad54cd44549e..0539ae2e05fb 100644 --- a/src/mon/mon_types.h +++ b/src/mon/mon_types.h @@ -547,6 +547,23 @@ namespace ceph { } } +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); diff --git a/src/test/cli/monmaptool/add-exists.t b/src/test/cli/monmaptool/add-exists.t index ee002e1203d5..182d012bf2cd 100644 --- a/src/test/cli/monmaptool/add-exists.t +++ b/src/test/cli/monmaptool/add-exists.t @@ -26,6 +26,7 @@ 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)" diff --git a/src/test/cli/monmaptool/add-many.t b/src/test/cli/monmaptool/add-many.t index ab37ebae6704..6280a0d309d9 100644 --- a/src/test/cli/monmaptool/add-many.t +++ b/src/test/cli/monmaptool/add-many.t @@ -23,6 +23,7 @@ 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 diff --git a/src/test/cli/monmaptool/clobber.t b/src/test/cli/monmaptool/clobber.t index 2a1dd17ec370..05a55b360f56 100644 --- a/src/test/cli/monmaptool/clobber.t +++ b/src/test/cli/monmaptool/clobber.t @@ -17,6 +17,7 @@ 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)" @@ -36,3 +37,4 @@ 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) diff --git a/src/test/cli/monmaptool/create-print.t b/src/test/cli/monmaptool/create-print.t index 3059b7918315..51b255b489e8 100644 --- a/src/test/cli/monmaptool/create-print.t +++ b/src/test/cli/monmaptool/create-print.t @@ -9,6 +9,7 @@ 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 @@ -16,3 +17,4 @@ 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) diff --git a/src/test/cli/monmaptool/create-with-add.t b/src/test/cli/monmaptool/create-with-add.t index efcf5c6ff2f8..19ba9699a26b 100644 --- a/src/test/cli/monmaptool/create-with-add.t +++ b/src/test/cli/monmaptool/create-with-add.t @@ -9,4 +9,5 @@ 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 diff --git a/src/test/cli/monmaptool/rm-nonexistent.t b/src/test/cli/monmaptool/rm-nonexistent.t index 08e6a328bc6f..b3d7fbcf5aad 100644 --- a/src/test/cli/monmaptool/rm-nonexistent.t +++ b/src/test/cli/monmaptool/rm-nonexistent.t @@ -24,6 +24,7 @@ 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)" diff --git a/src/test/cli/monmaptool/rm.t b/src/test/cli/monmaptool/rm.t index 5155f24b9aa6..5505320b3060 100644 --- a/src/test/cli/monmaptool/rm.t +++ b/src/test/cli/monmaptool/rm.t @@ -16,6 +16,7 @@ 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" ]