// adjust [near]full status
register_nearfull_status(osd, new_stats);
}
+ set<int64_t> deleted_pools;
for (set<pg_t>::const_iterator p = inc.pg_remove.begin();
p != inc.pg_remove.end();
++p) {
stat_pg_sub(removed_pg, s->second);
pg_stat.erase(s);
}
+ if (removed_pg.ps() == 0)
+ deleted_pools.insert(removed_pg.pool());
+ }
+ for (set<int64_t>::iterator p = deleted_pools.begin();
+ p != deleted_pools.end();
+ ++p) {
+ dout(20) << " deleted pool " << *p << dendl;
+ deleted_pool(*p);
}
for (set<int>::iterator p = inc.get_osd_stat_rm().begin();
const ceph::unordered_map<uint64_t, pool_stat_t>& pg_pool_sum_old);
void clear_delta();
+ void deleted_pool(int64_t pool) {
+ pg_pool_sum.erase(pool);
+ per_pool_sum_deltas.erase(pool);
+ per_pool_sum_deltas_stamps.erase(pool);
+ per_pool_sum_delta.erase(pool);
+ }
+
private:
void update_delta(CephContext *cct,
const utime_t ts,
ceph::unordered_map<uint64_t, pool_stat_t> pg_pool_sum_old;
// pgs
+ set<int64_t> deleted_pools;
bufferlist::iterator p = dirty_pgs.begin();
while (!p.end()) {
pg_t pgid;
pg_map.update_pg(pgid, bl);
} else {
pg_map.remove_pg(pgid);
+ if (pgid.ps() == 0)
+ deleted_pools.insert(pgid.pool());
}
}
pg_map.update_global_delta(g_ceph_context, inc_stamp, pg_sum_old);
pg_map.update_pool_deltas(g_ceph_context, inc_stamp, pg_pool_sum_old);
+ // clean up deleted pools after updating the deltas
+ for (set<int64_t>::iterator p = deleted_pools.begin();
+ p != deleted_pools.end();
+ ++p) {
+ dout(20) << " deleted pool " << *p << dendl;
+ pg_map.deleted_pool(*p);
+ }
+
// ok, we're now on the new version
pg_map.version = v;
}