return 0;
}
+void PG::Scrubber::cleanup_store(ObjectStore::Transaction *t) {
+ if (!store)
+ return;
+ struct OnComplete : Context {
+ std::unique_ptr<Scrub::Store> store;
+ OnComplete(
+ std::unique_ptr<Scrub::Store> &&store)
+ : store(std::move(store)) {}
+ void finish(int) override {}
+ };
+ store->cleanup(t);
+ t->register_on_complete(new OnComplete(std::move(store)));
+ assert(!store);
+}
+
void PG::repair_object(
const hobject_t& soid, list<pair<ScrubMap::object, pg_shard_t> > *ok_peers,
pg_shard_t bad_peer)
{
ObjectStore::Transaction t;
+ scrubber.cleanup_store(&t);
scrubber.store.reset(Scrub::Store::create(osd->store, &t,
info.pgid, coll));
osd->store->queue_transaction(osr.get(), std::move(t), nullptr);
}
void create_results(const hobject_t& obj);
+ void cleanup_store(ObjectStore::Transaction *t);
} scrubber;
bool scrub_after_recovery;
apply_and_flush_repops(is_primary());
pgbackend->on_change_cleanup(t);
+ scrubber.cleanup_store(t);
pgbackend->on_change();
// clear snap_trimmer state