pg_stats_valid(false),
osr(osd->osr_registry.lookup_or_create(p, (stringify(p)))),
finish_sync_event(NULL),
+ scrub_after_recovery(false),
active_pushes(0),
recovery_state(this)
{
log.reset_recovery_pointers();
scrubber.reserved_peers.clear();
+ scrub_after_recovery = false;
+
osd->recovery_wq.dequeue(this);
osd->snap_trim_wq.dequeue(this);
}
update_stats();
- if (state_test(PG_STATE_INCONSISTENT)) {
+ if (scrub_after_recovery) {
dout(10) << "_finish_recovery requeueing for scrub" << dendl;
+ scrub_after_recovery = false;
queue_scrub();
}
} else {
osd->clog.error(ss);
if (repair) {
state_clear(PG_STATE_CLEAN);
+ scrub_after_recovery = true;
for (map<hobject_t, pair<ScrubMap::object, int> >::iterator i =
scrubber.authoritative.begin();
i != scrubber.authoritative.end();
} scrubber;
+ bool scrub_after_recovery;
+
int active_pushes;
void repair_object(const hobject_t& soid, ScrubMap::object *po, int bad_peer, int ok_peer);