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();
return ret;
}
+bool PG::is_scrub_registered()
+{
+ return !scrubber.scrub_reg_stamp.is_zero();
+}
+
void PG::reg_next_scrub()
{
if (!is_primary())
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();
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,
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;
}
}
void scrub(epoch_t queued, ThreadPool::TPHandle &handle);
+ bool is_scrub_registered();
void reg_next_scrub();
void unreg_next_scrub();
/* You should not use these items without taking their respective queue locks
* (if they have one) */
xlist<PG*>::item stat_queue_item;
- bool scrub_registered = false;
bool scrub_queued;
bool recovery_queued;
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