if (osdmap.require_osd_release < CEPH_RELEASE_LUMINOUS) {
dout(7) << __func__ << " in the middle of upgrading, "
<< " trimming pending creating_pgs using pgmap" << dendl;
- trim_creating_pgs(&pending_creatings, mon->pgservice->get_pg_map());
+ trim_creating_pgs(&pending_creatings, *mon->pgservice->get_pg_stat());
}
bufferlist creatings_bl;
::encode(pending_creatings, creatings_bl);
}
void OSDMonitor::trim_creating_pgs(creating_pgs_t* creating_pgs,
- const PGMap& pgm)
+ const ceph::unordered_map<pg_t,pg_stat_t>& pg_stat)
{
auto p = creating_pgs->pgs.begin();
while (p != creating_pgs->pgs.end()) {
- auto q = pgm.pg_stat.find(p->first);
- if (q != pgm.pg_stat.end() &&
+ auto q = pg_stat.find(p->first);
+ if (q != pg_stat.end() &&
!(q->second.state & PG_STATE_CREATING)) {
dout(20) << __func__ << " pgmap shows " << p->first << " is created"
<< dendl;
std::mutex creating_pgs_lock;
creating_pgs_t update_pending_pgs(const OSDMap::Incremental& inc);
- void trim_creating_pgs(creating_pgs_t *creating_pgs, const PGMap& pgm);
+ void trim_creating_pgs(creating_pgs_t *creating_pgs,
+ const ceph::unordered_map<pg_t,pg_stat_t>& pgm);
unsigned scan_for_creating_pgs(
const mempool::osdmap::map<int64_t,pg_pool_t>& pools,
const mempool::osdmap::set<int64_t>& removed_pools,
virtual OSDStatIter osd_stat_iter_end() const = 0;
virtual const osd_stat_t *get_osd_stat(int osd) const = 0;
virtual const ceph::unordered_map<int32_t,osd_stat_t> *get_osd_stat() const = 0;
+ virtual const ceph::unordered_map<pg_t,pg_stat_t> *get_pg_stat() const = 0;
virtual float get_full_ratio() const = 0;
virtual float get_nearfull_ratio() const = 0;
virtual bool have_creating_pgs() const = 0;
const ceph::unordered_map<int32_t,osd_stat_t> *get_osd_stat() const {
return &parent.osd_stat;
}
-
+ const ceph::unordered_map<pg_t,pg_stat_t> *get_pg_stat() const {
+ return &parent.pg_stat;
+ }
float get_full_ratio() const { return parent.full_ratio; }
float get_nearfull_ratio() const { return parent.nearfull_ratio; }