]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon/MonMap: add min_mon_release field
authorSage Weil <sage@redhat.com>
Tue, 29 Jan 2019 18:49:56 +0000 (12:49 -0600)
committerSage Weil <sage@redhat.com>
Tue, 12 Feb 2019 18:40:36 +0000 (12:40 -0600)
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>
src/mon/MonMap.cc
src/mon/MonMap.h
src/mon/mon_types.h
src/test/cli/monmaptool/add-exists.t
src/test/cli/monmaptool/add-many.t
src/test/cli/monmaptool/clobber.t
src/test/cli/monmaptool/create-print.t
src/test/cli/monmaptool/create-with-add.t
src/test/cli/monmaptool/rm-nonexistent.t
src/test/cli/monmaptool/rm.t

index 0d25f72b506224de083cabbc89f0bb0ed26cadd9..90330a1dab387f7c93a459332a191ddc27f223f8 100644 (file)
@@ -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<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) {
@@ -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<string>::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");
index ee3d06338ded641f12b2c944f00b9ba243fef2b2..f9a043a0335c34728051888a750585c8ca706773 100644 (file)
@@ -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,
index ad54cd44549eb152f2fd9c89d96b2466c3de81eb..0539ae2e05fb30d5f2168dafa08360b602952f9d 100644 (file)
@@ -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);
 
index ee002e1203d5906eb22c424155856aa65429bb68..182d012bf2cdadd1ad989822aa7d986c9d9d0494 100644 (file)
@@ -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)"
index ab37ebae6704df06dc995828bc31c5453be2649f..6280a0d309d98023c18a8cbe24ce14c0ff656165 100644 (file)
@@ -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
index 2a1dd17ec37011b638b6252f0eff619a60b49a01..05a55b360f56d7a5cf9ae2d123018d8a4edaa4fd 100644 (file)
@@ -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)
index 3059b79183159a21d249800851dffb06a9a12777..51b255b489e8d5359eb0d6ad38eb1f8356368764 100644 (file)
@@ -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)
index efcf5c6ff2f8051cbb49e557651790cd9414aada..19ba9699a26b47f6451bf8370ab456430729c0cc 100644 (file)
@@ -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
index 08e6a328bc6fd2e95b4fa8034ce2feccac5a339a..b3d7fbcf5aadc023354f761c33dfcb72663f584c 100644 (file)
@@ -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)"
index 5155f24b9aa6ad3d056adfdcf6d1b871bfeced93..5505320b3060d33000bc9c25a33f16219bcb7d6b 100644 (file)
@@ -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" ]