* and same_primary_since.
*/
void OSD::project_pg_history(pg_t pgid, pg_history_t& h, epoch_t from,
- vector<int>& currentup, vector<int>& currentacting)
+ const vector<int>& currentup,
+ const vector<int>& currentacting)
{
dout(15) << "project_pg_history " << pgid
<< " from " << from << " to " << osdmap->get_epoch()
}
dout(5) << "queue_pg_for_deletion: " << pgid << dendl;
PG *pg = _lookup_lock_pg(pgid);
- if (pg->info.history.same_interval_since <= m->get_epoch()) {
+ pg_history_t history = pg->info.history;
+ vector<int> up, acting;
+ osdmap->pg_to_up_acting_osds(pgid, up, acting);
+ project_pg_history(pg->info.pgid, history, pg->get_osdmap()->get_epoch(),
+ up, acting);
+ if (history.same_interval_since <= m->get_epoch()) {
assert(pg->get_primary() == m->get_source().num());
pg->get();
_remove_pg(pg);
pg->put();
} else {
dout(10) << *pg << " ignoring remove request, pg changed in epoch "
- << pg->info.history.same_interval_since
+ << history.same_interval_since
<< " > " << m->get_epoch() << dendl;
pg->unlock();
}
void load_pgs();
void calc_priors_during(pg_t pgid, epoch_t start, epoch_t end, set<int>& pset);
void project_pg_history(pg_t pgid, pg_history_t& h, epoch_t from,
- vector<int>& lastup, vector<int>& lastacting);
+ const vector<int>& lastup, const vector<int>& lastacting);
void wake_pg_waiters(pg_t pgid) {
if (waiting_for_pg.count(pgid)) {