From: David Zafman Date: Thu, 13 Jun 2019 02:33:49 +0000 (-0700) Subject: osd: cleanup: Use the specific sched_time to see if scrub user requested X-Git-Tag: v15.1.0~2302^2~5 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=7597a9ad73b2f3d5781cfba022c958dd4be97d16;p=ceph.git osd: cleanup: Use the specific sched_time to see if scrub user requested Replace bool scrub_registered with check of scrub_reg_stamp Signed-off-by: David Zafman --- diff --git a/src/osd/OSD.h b/src/osd/OSD.h index b2a9df58e8e4..24d11b9daedf 100644 --- a/src/osd/OSD.h +++ b/src/osd/OSD.h @@ -343,7 +343,7 @@ public: f->dump_stream("pgid") << i.pgid; f->dump_stream("sched_time") << i.sched_time; f->dump_stream("deadline") << i.deadline; - f->dump_bool("forced", i.sched_time == i.deadline); + f->dump_bool("forced", i.sched_time == PG::Scrubber::scrub_must_stamp()); f->close_section(); } f->close_section(); diff --git a/src/osd/PG.cc b/src/osd/PG.cc index aa26a1863606..1bac86d79d50 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -1442,6 +1442,11 @@ bool PG::sched_scrub() return ret; } +bool PG::is_scrub_registered() +{ + return !scrubber.scrub_reg_stamp.is_zero(); +} + void PG::reg_next_scrub() { if (!is_primary()) @@ -1451,7 +1456,7 @@ void PG::reg_next_scrub() bool must = false; if (scrubber.must_scrub) { // Set the smallest time that isn't utime_t() - reg_stamp = utime_t(0,1); + reg_stamp = Scrubber::scrub_must_stamp(); must = true; } else if (info.stats.stats_invalid && cct->_conf->osd_scrub_invalid_stats) { reg_stamp = ceph_clock_now(); @@ -1464,7 +1469,7 @@ void PG::reg_next_scrub() double scrub_min_interval = 0, scrub_max_interval = 0; pool.info.opts.get(pool_opts_t::SCRUB_MIN_INTERVAL, &scrub_min_interval); pool.info.opts.get(pool_opts_t::SCRUB_MAX_INTERVAL, &scrub_max_interval); - ceph_assert(scrubber.scrub_reg_stamp == utime_t()); + ceph_assert(!is_scrub_registered()); scrubber.scrub_reg_stamp = osd->reg_pg_scrub(info.pgid, reg_stamp, scrub_min_interval, @@ -1472,15 +1477,13 @@ void PG::reg_next_scrub() must); dout(10) << __func__ << " pg " << pg_id << " register next scrub, scrub time " << scrubber.scrub_reg_stamp << ", must = " << (int)must << dendl; - scrub_registered = true; } void PG::unreg_next_scrub() { - if (scrub_registered) { + if (is_scrub_registered()) { osd->unreg_pg_scrub(info.pgid, scrubber.scrub_reg_stamp); scrubber.scrub_reg_stamp = utime_t(); - scrub_registered = false; } } diff --git a/src/osd/PG.h b/src/osd/PG.h index 1b425525b86c..76ec494a8606 100644 --- a/src/osd/PG.h +++ b/src/osd/PG.h @@ -383,6 +383,7 @@ public: void scrub(epoch_t queued, ThreadPool::TPHandle &handle); + bool is_scrub_registered(); void reg_next_scrub(); void unreg_next_scrub(); @@ -657,7 +658,6 @@ protected: /* You should not use these items without taking their respective queue locks * (if they have one) */ xlist::item stat_queue_item; - bool scrub_registered = false; bool scrub_queued; bool recovery_queued; @@ -1103,6 +1103,8 @@ public: OpRequestRef active_rep_scrub; utime_t scrub_reg_stamp; // stamp we registered for + static utime_t scrub_must_stamp() { return utime_t(0,1); } + omap_stat_t omap_stats = (const struct omap_stat_t){ 0 }; // For async sleep