From 01514bdd5aece46f3579f12c1286ea4491394002 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Sat, 9 Feb 2019 13:42:49 -0600 Subject: [PATCH] mon: record 'min_mon_release' file and prevent startup if it's too old Signed-off-by: Sage Weil --- src/ceph_mon.cc | 22 ++++++++++++++++++++++ src/mon/MonmapMonitor.cc | 10 ++++++++++ 2 files changed, 32 insertions(+) diff --git a/src/ceph_mon.cc b/src/ceph_mon.cc index 68828cdf650af..4d7fa9b1c4eef 100644 --- a/src/ceph_mon.cc +++ b/src/ceph_mon.cc @@ -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); diff --git a/src/mon/MonmapMonitor.cc b/src/mon/MonmapMonitor.cc index 94a51c1846cfb..0c44894dab1e5 100644 --- a/src/mon/MonmapMonitor.cc +++ b/src/mon/MonmapMonitor.cc @@ -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() -- 2.39.5