bool all_unfound_are_queried_or_lost(const OSDMapRef osdmap) const;
- void calc_min_last_complete_ondisk() {
- eversion_t min = last_complete_ondisk;
- ceph_assert(!acting_recovery_backfill.empty());
- for (set<pg_shard_t>::iterator i = acting_recovery_backfill.begin();
- i != acting_recovery_backfill.end();
- ++i) {
- if (*i == get_primary()) continue;
- if (peer_last_complete_ondisk.count(*i) == 0)
- return; // we don't have complete info
- eversion_t a = peer_last_complete_ondisk[*i];
- if (a < min)
- min = a;
- }
- if (min == min_last_complete_ondisk)
- return;
- min_last_complete_ondisk = min;
- return;
- }
-
virtual void calc_trim_to() = 0;
virtual void calc_trim_to_aggressive() = 0;
ps->peer_last_complete_ondisk[pg_shard_t(trim.from, trim.shard)] = trim.trim_to;
// trim log when the pg is recovered
- pg->calc_min_last_complete_ondisk();
+ ps->calc_min_last_complete_ondisk();
return discard_event();
}
void proc_replica_log(pg_info_t &oinfo, const pg_log_t &olog,
pg_missing_t& omissing, pg_shard_t from);
+ void calc_min_last_complete_ondisk() {
+ eversion_t min = last_complete_ondisk;
+ ceph_assert(!acting_recovery_backfill.empty());
+ for (set<pg_shard_t>::iterator i = acting_recovery_backfill.begin();
+ i != acting_recovery_backfill.end();
+ ++i) {
+ if (*i == get_primary()) continue;
+ if (peer_last_complete_ondisk.count(*i) == 0)
+ return; // we don't have complete info
+ eversion_t a = peer_last_complete_ondisk[*i];
+ if (a < min)
+ min = a;
+ }
+ if (min == min_last_complete_ondisk)
+ return;
+ min_last_complete_ondisk = min;
+ return;
+ }
+
void fulfill_info(
pg_shard_t from, const pg_query_t &query,
pair<pg_shard_t, pg_info_t> ¬ify_info);
return missing_loc.num_unfound();
}
+ eversion_t get_min_last_complete_ondisk() const {
+ return min_last_complete_ondisk;
+ }
+
private:
void apply_peer_features(uint64_t f) { peer_features &= f; }
void reset_min_peer_features() {
}
publish_stats_to_osd();
- calc_min_last_complete_ondisk();
+ recovery_state.calc_min_last_complete_ondisk();
dout(10) << " removing " << *repop << dendl;
ceph_assert(!repop_queue.empty());
last_complete_ondisk),
get_osdmap_epoch());
} else {
- calc_min_last_complete_ondisk();
+ recovery_state.calc_min_last_complete_ondisk();
}
}