From: Sage Weil Date: Fri, 6 Apr 2018 15:26:35 +0000 (-0500) Subject: mon/PGMap: track pgs by state for each pool X-Git-Tag: v14.0.1~371^2~60 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=8a9b3f33f038224b99023492109759509f103ecd;p=ceph.git mon/PGMap: track pgs by state for each pool We had this globally, but it's useful to have the per-pool breakdowns. Signed-off-by: Sage Weil --- diff --git a/src/mon/PGMap.cc b/src/mon/PGMap.cc index 488b4a97f9640..8ff86665b4a1f 100644 --- a/src/mon/PGMap.cc +++ b/src/mon/PGMap.cc @@ -1156,6 +1156,7 @@ void PGMap::calc_stats() pg_sum = pool_stat_t(); osd_sum = osd_stat_t(); num_pg_by_state.clear(); + num_pg_by_pool_state.clear(); num_pg_by_osd.clear(); for (auto p = pg_stat.begin(); @@ -1177,6 +1178,7 @@ void PGMap::stat_pg_add(const pg_t &pgid, const pg_stat_t &s, num_pg++; num_pg_by_state[s.state]++; + num_pg_by_pool_state[pgid.pool()][s.state]++; num_pg_by_pool[pgid.pool()]++; if ((s.state & PG_STATE_CREATING) && @@ -1229,8 +1231,12 @@ void PGMap::stat_pg_sub(const pg_t &pgid, const pg_stat_t &s, ceph_assert(end >= 0); if (end == 0) num_pg_by_state.erase(s.state); + if (--num_pg_by_pool_state[pgid.pool()][s.state] == 0) { + num_pg_by_pool_state[pgid.pool()].erase(s.state); + } end = --num_pg_by_pool[pgid.pool()]; if (end == 0) { + num_pg_by_pool_state.erase(pgid.pool()); num_pg_by_pool.erase(pgid.pool()); pg_pool_sum.erase(pgid.pool()); } diff --git a/src/mon/PGMap.h b/src/mon/PGMap.h index 89b8eb6b40293..ce4d9efab0a37 100644 --- a/src/mon/PGMap.h +++ b/src/mon/PGMap.h @@ -281,6 +281,7 @@ public: mempool::pgmap::unordered_map > pg_by_osd; mempool::pgmap::unordered_map blocked_by_sum; mempool::pgmap::list< pair > pg_sum_deltas; + mempool::pgmap::unordered_map> num_pg_by_pool_state; utime_t stamp;