const hobject_t& soid, pg_shard_t peer,
eversion_t version,
interval_set<uint64_t> &data_subset,
- map<hobject_t, interval_set<uint64_t> >& clone_subsets,
- PushOp *pop, bool cache_dont_need)
+ map<hobject_t, interval_set<uint64_t>, hobject_t::BitwiseComparator>& clone_subsets,
- PushOp *pop)
++ PushOp *pop,
++ bool cache_dont_need)
{
get_parent()->begin_peer_recover(peer, soid);
// take note.
const hobject_t& soid, pg_shard_t peer,
eversion_t version,
interval_set<uint64_t> &data_subset,
- map<hobject_t, interval_set<uint64_t> >& clone_subsets,
+ map<hobject_t, interval_set<uint64_t>, hobject_t::BitwiseComparator>& clone_subsets,
- PushOp *op);
+ PushOp *op,
+ bool cache = false);
void calc_head_subsets(ObjectContextRef obc, SnapSet& snapset, const hobject_t& head,
const pg_missing_t& missing,
const hobject_t &last_backfill,
return pg_log.get_missing().missing.count(soid);
}
-void ReplicatedPG::wait_for_unreadable_object(
- const hobject_t& soid, OpRequestRef op)
+void ReplicatedPG::maybe_kick_recovery(
+ const hobject_t &soid)
{
- assert(is_unreadable_object(soid));
-
eversion_t v;
- bool needs_recovery = missing_loc.needs_recovery(soid, &v);
- assert(needs_recovery);
+ if (!missing_loc.needs_recovery(soid, &v))
+ return;
- map<hobject_t, ObjectContextRef>::const_iterator p = recovering.find(soid);
+ map<hobject_t, ObjectContextRef, hobject_t::BitwiseComparator>::const_iterator p = recovering.find(soid);
if (p != recovering.end()) {
- dout(7) << "missing " << soid << " v " << v << ", already recovering." << dendl;
+ dout(7) << "object " << soid << " v " << v << ", already recovering." << dendl;
} else if (missing_loc.is_unfound(soid)) {
- dout(7) << "missing " << soid << " v " << v << ", is unfound." << dendl;
+ dout(7) << "object " << soid << " v " << v << ", is unfound." << dendl;
} else {
- dout(7) << "missing " << soid << " v " << v << ", recovering." << dendl;
+ dout(7) << "object " << soid << " v " << v << ", recovering." << dendl;
PGBackend::RecoveryHandle *h = pgbackend->open_recovery_op();
+ h->cache_dont_need = false;
if (is_missing_object(soid)) {
recover_missing(soid, v, cct->_conf->osd_client_op_priority, h);
} else {