]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon/OSDMonitor: Added extra check before mon.go_recovery_stretch_mode() 48803/head
authorKamoltat <ksirivad@redhat.com>
Wed, 3 Aug 2022 14:22:49 +0000 (14:22 +0000)
committerKamoltat <ksirivad@redhat.com>
Tue, 8 Nov 2022 21:15:40 +0000 (21:15 +0000)
Problem:
There are certain scenarios in degraded
stretched cluster where will try to
go into the
function ``Monitor::go_recovery_stretch_mode()``
that will lead to a `ceph_assert`.

Solution:
Make sure ``dead_mon_buckets.size() == 0``
in ``OSDMonitor:update_from_paxos()``
before going into ``Monitor::go_recovery_stretch_mode()``.

Fixes:
https://bugzilla.redhat.com/show_bug.cgi?id=2104207

Signed-off-by: Kamoltat <ksirivad@redhat.com>
(cherry picked from commit d95c41aa0c5c9bf9c3ac9bc4012f57e556ae4a81)

src/mon/OSDMonitor.cc

index 97034994546a630c75f06ab8cc98a1b7ac4f14bc..b88813e8af5558ed343d1ab48b36d4c3c4bec20b 100644 (file)
@@ -960,10 +960,12 @@ void OSDMonitor::update_from_paxos(bool *need_bootstrap)
   dout(20) << "mon_stretch_cluster_recovery_ratio: " << cct->_conf.get_val<double>("mon_stretch_cluster_recovery_ratio") << dendl;
        if (prev_num_up_osd < osdmap.num_up_osd &&
            (osdmap.num_up_osd / (double)osdmap.num_osd) >
-           cct->_conf.get_val<double>("mon_stretch_cluster_recovery_ratio")) {
+           cct->_conf.get_val<double>("mon_stretch_cluster_recovery_ratio") &&
+      mon.dead_mon_buckets.size() == 0) {
          // TODO: This works for 2-site clusters when the OSD maps are appropriately
          // trimmed and everything is "normal" but not if you have a lot of out OSDs
          // you're ignoring or in some really degenerate failure cases
+
          dout(10) << "Enabling recovery stretch mode in this map" << dendl;
          mon.go_recovery_stretch_mode();
        }