// construct authoritative scrub map for type specific scrubbing
ScrubMap authmap(scrubber.primary_scrubmap);
+ map<hobject_t, pair<uint32_t, uint32_t> > missing_digest;
if (acting.size() > 1) {
dout(10) << __func__ << " comparing replica scrub maps" << dendl;
scrubber.missing,
scrubber.inconsistent,
authoritative,
- scrubber.missing_digest,
+ missing_digest,
scrubber.shallow_errors,
scrubber.deep_errors,
info.pgid, acting,
}
// ok, do the pg-type specific scrubbing
- _scrub(authmap);
+ _scrub(authmap, missing_digest);
}
void PG::scrub_process_inconsistent()
// Map from object with errors to good peers
map<hobject_t, list<pair<ScrubMap::object, pg_shard_t> > > authoritative;
- // Objects who need digest updates
- map<hobject_t, pair<uint32_t,uint32_t> > missing_digest;
+ // digest updates which we are waiting on
int num_digest_updates_pending;
// chunky scrub
inconsistent.clear();
missing.clear();
authoritative.clear();
- missing_digest.clear();
num_digest_updates_pending = 0;
}
*/
virtual bool _range_available_for_scrub(
const hobject_t &begin, const hobject_t &end) = 0;
- virtual void _scrub(ScrubMap &map) { }
+ virtual void _scrub(
+ ScrubMap &map,
+ const std::map<hobject_t, pair<uint32_t, uint32_t> > &missing_digest) { }
virtual void _scrub_clear_state() { }
virtual void _scrub_finish() { }
virtual void get_colls(list<coll_t> *out) = 0;
}
}
-void ReplicatedPG::_scrub(ScrubMap& scrubmap)
+void ReplicatedPG::_scrub(
+ ScrubMap &scrubmap,
+ const map<hobject_t, pair<uint32_t, uint32_t> > &missing_digest)
{
dout(10) << "_scrub" << dendl;
}
if (scrubber.shallow_errors == 0) {
- for (map<hobject_t,pair<uint32_t,uint32_t> >::iterator p =
- scrubber.missing_digest.begin();
- p != scrubber.missing_digest.end();
+ for (map<hobject_t,pair<uint32_t,uint32_t> >::const_iterator p =
+ missing_digest.begin();
+ p != missing_digest.end();
++p) {
if (p->first.is_snapdir())
continue;
// -- scrub --
virtual bool _range_available_for_scrub(
const hobject_t &begin, const hobject_t &end);
- virtual void _scrub(ScrubMap& map);
+ virtual void _scrub(
+ ScrubMap &map,
+ const std::map<hobject_t, pair<uint32_t, uint32_t> > &missing_digest);
void _scrub_digest_updated();
virtual void _scrub_clear_state();
virtual void _scrub_finish();