diff --git a/src/mon/Monitor.cc b/src/mon/Monitor.cc index ed838eb4db93a..30cd877ff6987 100644 --- a/src/mon/Monitor.cc +++ b/src/mon/Monitor.cc @@ -6655,7 +6655,6 @@ void Monitor::go_recovery_stretch_mode() if (!osdmon()->is_writeable()) { osdmon()->wait_for_writeable_ctx(new CMonGoRecovery(this)); } - set_recovery_stretch_mode(); osdmon()->trigger_recovery_stretch_mode(); } @@ -6749,7 +6748,6 @@ void Monitor::trigger_healthy_stretch_mode() } ceph_assert(osdmon()->osdmap.recovering_stretch_mode); - set_healthy_stretch_mode(); osdmon()->trigger_healthy_stretch_mode(); monmon()->trigger_healthy_stretch_mode(); } diff --git a/src/mon/Monitor.h b/src/mon/Monitor.h index 8471272bfc107..8e4f39ae51e97 100644 --- a/src/mon/Monitor.h +++ b/src/mon/Monitor.h @@ -266,6 +266,19 @@ class Monitor : public Dispatcher, bool is_stretch_mode() { return stretch_mode_engaged; } bool is_degraded_stretch_mode() { return degraded_stretch_mode; } bool is_recovering_stretch_mode() { return recovering_stretch_mode; } + + /** + * This set of functions maintains the in-memory stretch state + * and sets up transitions of the map states by calling in to + * MonmapMonitor and OSDMonitor. + * + * The [maybe_]go_* functions are called on the leader to + * decide if transitions should happen; the trigger_* functions + * set up the map transitions; and the set_* functions actually + * change the memory state -- but these are only called + * via OSDMonitor::update_from_paxos, to guarantee consistent + * updates across the entire cluster. + */ void try_engage_stretch_mode(); void maybe_go_degraded_stretch_mode(); void trigger_degraded_stretch_mode(const set& dead_mons, diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index ce29f7d645842..08ea6b2f39949 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -959,6 +959,8 @@ void OSDMonitor::update_from_paxos(bool *need_bootstrap) } else { mon.set_recovery_stretch_mode(); } + } else { + mon.set_healthy_stretch_mode(); } if (marked_osd_down && (!osdmap.degraded_stretch_mode || osdmap.recovering_stretch_mode)) {