]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: record 'min_mon_release' file and prevent startup if it's too old
authorSage Weil <sage@redhat.com>
Sat, 9 Feb 2019 19:42:49 +0000 (13:42 -0600)
committerSage Weil <sage@redhat.com>
Wed, 13 Feb 2019 17:46:45 +0000 (11:46 -0600)
Signed-off-by: Sage Weil <sage@redhat.com>
src/ceph_mon.cc
src/mon/MonmapMonitor.cc

index 68828cdf650af18fe4de57a62c04b46232dcbc49..4d7fa9b1c4eefaedef56f658d2f2f40cafba364e 100644 (file)
@@ -558,6 +558,28 @@ int main(int argc, const char **argv)
   register_async_signal_handler(SIGHUP, sighup_handler);
 
   MonitorDBStore *store = new MonitorDBStore(g_conf()->mon_data);
+
+  // make sure we aren't upgrading too fast
+  {
+    string val;
+    int r = store->read_meta("min_mon_release", &val);
+    if (r >= 0 && val.size()) {
+      int min = atoi(val.c_str());
+      if (min &&
+         min + 2 < (int)ceph_release()) {
+       derr << "recorded min_mon_release is " << min
+            << " (" << ceph_release_name(min)
+            << ") which is >2 releases older than installed "
+            << ceph_release() << " (" << ceph_release_name(ceph_release())
+            << "); you can only upgrade 2 releases at a time" << dendl;
+       derr << "you should first upgrade to "
+            << (min + 1) << " (" << ceph_release_name(min + 1) << ") or "
+            << (min + 2) << " (" << ceph_release_name(min + 2) << ")" << dendl;
+       prefork.exit(1);
+      }
+    }
+  }
+
   {
     ostringstream oss;
     err = store->open(oss);
index 94a51c1846cfbe5f37639d43fdf6b23c5a889483..0c44894dab1e55e97cd97be47c154dcd8a5d28d8 100644 (file)
@@ -81,6 +81,16 @@ void MonmapMonitor::update_from_paxos(bool *need_bootstrap)
   }
 
   check_subs();
+
+  // make sure we've recorded min_mon_release
+  string val;
+  if (mon->store->read_meta("min_mon_release", &val) < 0 ||
+      val.size() == 0 ||
+      atoi(val.c_str()) != (int)ceph_release()) {
+    dout(10) << __func__ << " updating min_mon_release meta" << dendl;
+    mon->store->write_meta("min_mon_release",
+                          stringify(ceph_release()));
+  }
 }
 
 void MonmapMonitor::create_pending()