hobject_t start; // lower bound of scrub, inclusive
hobject_t end; // upper bound of scrub, exclusive
bool deep; // true if scrub should be deep
- uint32_t seed; // seed value for digest calculation
bool allow_preemption = false;
epoch_t get_map_epoch() const override {
MOSDRepScrub()
: MOSDFastDispatchOp(MSG_OSD_REP_SCRUB, HEAD_VERSION, COMPAT_VERSION),
chunky(false),
- deep(false),
- seed(0) { }
+ deep(false) { }
MOSDRepScrub(spg_t pgid, eversion_t scrub_to, epoch_t map_epoch, epoch_t min_epoch,
- hobject_t start, hobject_t end, bool deep, uint32_t seed,
+ hobject_t start, hobject_t end, bool deep,
bool preemption)
: MOSDFastDispatchOp(MSG_OSD_REP_SCRUB, HEAD_VERSION, COMPAT_VERSION),
pgid(pgid),
start(start),
end(end),
deep(deep),
- seed(seed),
allow_preemption(preemption) { }
<< ",start:" << start << ",end:" << end
<< ",chunky:" << chunky
<< ",deep:" << deep
- << ",seed:" << seed
<< ",version:" << header.version
<< ",allow_preemption:" << (int)allow_preemption
<< ")";
encode(end, payload);
encode(deep, payload);
encode(pgid.shard, payload);
- encode(seed, payload);
+ encode((uint32_t)-1, payload); // seed
encode(min_epoch, payload);
encode(allow_preemption, payload);
}
decode(end, p);
decode(deep, p);
decode(pgid.shard, p);
- decode(seed, p);
+ {
+ uint32_t seed;
+ decode(seed, p);
+ }
if (header.version >= 7) {
decode(min_epoch, p);
} else {
auto_repair(false),
num_digest_updates_pending(0),
state(INACTIVE),
- deep(false),
- seed(0)
+ deep(false)
{}
PG::Scrubber::~Scrubber() {}
void PG::_request_scrub_map(
pg_shard_t replica, eversion_t version,
hobject_t start, hobject_t end,
- bool deep, uint32_t seed,
+ bool deep,
bool allow_preemption)
{
assert(replica != pg_whoami);
dout(10) << "scrub requesting scrubmap from osd." << replica
- << " deep " << (int)deep << " seed " << seed << dendl;
+ << " deep " << (int)deep << dendl;
MOSDRepScrub *repscrubop = new MOSDRepScrub(
spg_t(info.pgid.pgid, replica.shard), version,
get_osdmap()->get_epoch(),
get_last_peering_reset(),
- start, end, deep, seed,
+ start, end, deep,
allow_preemption);
// default priority, we want the rep scrub processed prior to any recovery
// or client io messages (we are holding a lock!)
hobject_t start,
hobject_t end,
bool deep,
- uint32_t seed,
ThreadPool::TPHandle &handle)
{
dout(10) << __func__ << " [" << start << "," << end << ") "
// start
while (pos.empty()) {
pos.deep = deep;
- pos.seed = seed;
map.valid_through = info.last_update;
osr->flush();
osd->clog->debug(oss);
}
- scrubber.seed = -1;
scrubber.preempt_left = cct->_conf->get_val<uint64_t>(
"osd_scrub_max_preemptions");
scrubber.preempt_divisor = 1;
if (*i == pg_whoami) continue;
_request_scrub_map(*i, scrubber.subset_last_update,
scrubber.start, scrubber.end, scrubber.deep,
- scrubber.seed,
scrubber.preempt_left > 0);
scrubber.waiting_on_whom.insert(*i);
}
scrubber.primary_scrubmap,
scrubber.primary_scrubmap_pos,
scrubber.start, scrubber.end,
- scrubber.deep, scrubber.seed,
+ scrubber.deep,
handle);
if (ret == -EINPROGRESS) {
requeue_scrub();
scrubber.replica_scrubmap,
scrubber.replica_scrubmap_pos,
scrubber.start, scrubber.end,
- scrubber.deep, scrubber.seed,
+ scrubber.deep,
handle);
}
if (ret == -EINPROGRESS) {
q.f->dump_stream("scrubber.end") << pg->scrubber.end;
q.f->dump_stream("scrubber.subset_last_update") << pg->scrubber.subset_last_update;
q.f->dump_bool("scrubber.deep", pg->scrubber.deep);
- q.f->dump_unsigned("scrubber.seed", pg->scrubber.seed);
{
q.f->open_array_section("scrubber.waiting_on_whom");
for (set<pg_shard_t>::iterator p = pg->scrubber.waiting_on_whom.begin();
std::unique_ptr<Scrub::Store> store;
// deep scrub
bool deep;
- uint32_t seed;
int preempt_left;
int preempt_divisor;
large_omap_objects = 0;
fixed = 0;
deep = false;
- seed = 0;
run_callbacks();
inconsistent.clear();
missing.clear();
ThreadPool::TPHandle &handle);
void _request_scrub_map(pg_shard_t replica, eversion_t version,
hobject_t start, hobject_t end, bool deep,
- uint32_t seed, bool allow_preemption);
+ bool allow_preemption);
int build_scrub_map_chunk(
ScrubMap &map,
ScrubMapBuilder &pos,
- hobject_t start, hobject_t end, bool deep, uint32_t seed,
+ hobject_t start, hobject_t end, bool deep,
ThreadPool::TPHandle &handle);
/**
* returns true if [begin, end) is good to scrub at this time