From c2f954b92e033e3001156ed9df6d1d5bbed08f23 Mon Sep 17 00:00:00 2001 From: Ronen Friedman Date: Wed, 13 Oct 2021 07:12:09 +0000 Subject: [PATCH] osd/scrub: fix the handling of deep-scrub when noscrub is set Recent scrub scheduling code errs in (at one location) incorrectly considering noscrub as not precluding deep-scrub. Fixes: https://tracker.ceph.com/issues/52901 Signed-off-by: Ronen Friedman --- src/osd/PG.cc | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/osd/PG.cc b/src/osd/PG.cc index a68d75ed160d0..455eb80a7178c 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -1485,15 +1485,20 @@ bool PG::verify_periodic_scrub_mode(bool allow_deep_scrub, std::optional PG::verify_scrub_mode() const { - dout(10) << __func__ << " processing pg " << info.pgid << dendl; - - bool allow_deep_scrub = !(get_osdmap()->test_flag(CEPH_OSDMAP_NODEEP_SCRUB) || - pool.info.has_flag(pg_pool_t::FLAG_NODEEP_SCRUB)); bool allow_regular_scrub = !(get_osdmap()->test_flag(CEPH_OSDMAP_NOSCRUB) || - pool.info.has_flag(pg_pool_t::FLAG_NOSCRUB)); + pool.info.has_flag(pg_pool_t::FLAG_NOSCRUB)); + bool allow_deep_scrub = allow_regular_scrub && + !(get_osdmap()->test_flag(CEPH_OSDMAP_NODEEP_SCRUB) || + pool.info.has_flag(pg_pool_t::FLAG_NODEEP_SCRUB)); bool has_deep_errors = (info.stats.stats.sum.num_deep_scrub_errors > 0); - bool try_to_auto_repair = - (cct->_conf->osd_scrub_auto_repair && get_pgbackend()->auto_repair_supported()); + bool try_to_auto_repair = (cct->_conf->osd_scrub_auto_repair && + get_pgbackend()->auto_repair_supported()); + + dout(10) << __func__ << " pg: " << info.pgid + << " allow: " << allow_regular_scrub << "/" << allow_deep_scrub + << " deep errs: " << has_deep_errors + << " auto-repair: " << try_to_auto_repair << " (" + << cct->_conf->osd_scrub_auto_repair << ")" << dendl; auto upd_flags = m_planned_scrub; -- 2.39.5