]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
mon: set_healthy_stretch_mode in update_from_paxos, not random leader calls!
authorGreg Farnum <gfarnum@redhat.com>
Tue, 13 Apr 2021 06:25:47 +0000 (06:25 +0000)
committerGreg Farnum <gfarnum@redhat.com>
Tue, 13 Apr 2021 06:39:10 +0000 (06:39 +0000)
Add header comment describing how this works now.

Fixes: https://tracker.ceph.com/issues/50308
Signed-off-by: Greg Farnum <gfarnum@redhat.com>
src/mon/Monitor.cc
src/mon/Monitor.h
src/mon/OSDMonitor.cc

index ed838eb4db93af2f01d84ea454d9b4529c10a52a..30cd877ff698790cbaecd2131607319627d46d61 100644 (file)
@@ -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();
 }
index 8471272bfc1075b8faeb4ed7737e7ef82e271de5..8e4f39ae51e97f430ab20aeb5eb246d52a4a9bc7 100644 (file)
@@ -266,6 +266,19 @@ public:
   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<string>& dead_mons,
index ce29f7d6458427427ec7d0da9f80fba443538cc3..08ea6b2f39949e348d213735c1a1b2cdaf9bf933 100644 (file)
@@ -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)) {