From: xie xingguo Date: Thu, 16 Feb 2017 01:50:27 +0000 (+0800) Subject: mon/PGMap: add up_primary pg number field for "pg dump osds" cmd X-Git-Tag: v12.0.3~121^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=781bd5f05f38d9412792972dc82e02d2823f203d;p=ceph.git mon/PGMap: add up_primary pg number field for "pg dump osds" cmd As follows: [root@tecs131 ~]# ceph pg dump osds OSD_STAT USED AVAIL TOTAL HB_PEERS PG_SUM UP_PRIMARY_PG_SUM 9 118G 822G 941G [0,1,2,4,5,7,8,10,11,12,13,15,16,17,20,21,22,23,25,27,29] 299 101 8 122G 819G 941G [3,4,6,7,9,10,11,14,16,18,19,20,22,23,24,25,26,27,28,29] 311 107 7 124G 817G 941G [0,1,2,3,5,6,8,9,10,12,13,14,15,17,18,19,21,24,26,28] 314 102 6 119G 821G 941G [0,1,2,4,5,7,8,11,12,13,15,16,17,20,21,22,23,25,27,29] 311 103 5 127G 813G 941G [3,4,6,7,9,10,11,14,16,18,19,20,22,23,24,25,26,27,28,29] 333 113 4 118G 822G 941G [0,1,2,3,5,6,8,9,10,12,13,14,15,17,18,19,21,24,26,28] 304 127 3 124G 816G 941G [0,1,2,4,5,7,8,11,12,13,15,16,17,20,21,22,23,25,27,29] 324 106 29 111G 829G 941G [0,1,2,3,5,6,8,9,10,12,13,14,15,17,18,19,21,24,26,28] 282 100 17 115G 825G 941G [3,4,6,7,9,10,11,14,16,18,19,20,22,23,24,25,26,27,28,29] 291 101 16 122G 819G 941G [0,1,2,3,5,6,8,9,10,12,13,14,15,17,18,19,21,24,26,28] 321 104 15 105G 836G 941G [3,4,6,7,9,10,11,14,16,18,19,20,22,23,24,25,26,27,28,29] 273 77 14 122G 819G 941G [0,1,2,4,5,7,8,11,12,13,15,16,17,20,21,22,23,25,27,29] 316 120 13 120G 821G 941G [3,4,6,7,9,10,11,12,14,16,18,19,20,22,23,24,25,26,27,28,29] 305 98 10 111G 829G 941G [0,1,2,4,5,7,8,9,11,12,13,15,16,17,20,21,22,23,25,27,29] 272 67 12 126G 814G 941G [3,4,6,7,9,10,11,13,14,16,18,19,20,22,23,24,25,26,27,28,29] 321 97 1 127G 813G 941G [0,2,3,4,6,7,9,10,11,14,16,18,19,20,22,23,24,25,26,27,28,29] 326 104 Signed-off-by: xie xingguo --- diff --git a/src/mon/PGMap.cc b/src/mon/PGMap.cc index df7184378227..e1a6e9b547ad 100644 --- a/src/mon/PGMap.cc +++ b/src/mon/PGMap.cc @@ -342,6 +342,7 @@ void PGMap::calc_stats() pg_sum = pool_stat_t(); osd_sum = osd_stat_t(); pg_by_osd.clear(); + num_primary_pg_by_osd.clear(); for (ceph::unordered_map::iterator p = pg_stat.begin(); p != pg_stat.end(); @@ -470,6 +471,9 @@ void PGMap::stat_pg_add(const pg_t &pgid, const pg_stat_t &s, pg_by_osd[*p].insert(pgid); for (vector::const_iterator p = s.up.begin(); p != s.up.end(); ++p) pg_by_osd[*p].insert(pgid); + + if (s.up_primary >= 0) + num_primary_pg_by_osd[s.up_primary]++; } void PGMap::stat_pg_sub(const pg_t &pgid, const pg_stat_t &s, @@ -525,6 +529,12 @@ void PGMap::stat_pg_sub(const pg_t &pgid, const pg_stat_t &s, if (oset.empty()) pg_by_osd.erase(*p); } + + if (s.up_primary >= 0) { + auto it = num_primary_pg_by_osd.find(s.up_primary); + if (it != num_primary_pg_by_osd.end() && it->second > 0) + it->second--; + } } void PGMap::stat_pg_update(const pg_t pgid, pg_stat_t& s, @@ -956,6 +966,7 @@ void PGMap::dump_osd_stats(ostream& ss) const tab.define_column("TOTAL", TextTable::LEFT, TextTable::RIGHT); tab.define_column("HB_PEERS", TextTable::LEFT, TextTable::RIGHT); tab.define_column("PG_SUM", TextTable::LEFT, TextTable::RIGHT); + tab.define_column("PRIMARY_PG_SUM", TextTable::LEFT, TextTable::RIGHT); for (ceph::unordered_map::const_iterator p = osd_stat.begin(); p != osd_stat.end(); @@ -966,6 +977,7 @@ void PGMap::dump_osd_stats(ostream& ss) const << si_t(p->second.kb << 10) << p->second.hb_peers << get_num_pg_by_osd(p->first) + << get_num_primary_pg_by_osd(p->first) << TextTable::endrow; } diff --git a/src/mon/PGMap.h b/src/mon/PGMap.h index 1c86ab3afffd..ab2b9524beb0 100644 --- a/src/mon/PGMap.h +++ b/src/mon/PGMap.h @@ -124,6 +124,7 @@ public: mutable epoch_t min_last_epoch_clean; ceph::unordered_map blocked_by_sum; ceph::unordered_map > pg_by_osd; + ceph::unordered_map num_primary_pg_by_osd; utime_t stamp; @@ -253,6 +254,15 @@ public: return pool_stat_t(); } + int get_num_primary_pg_by_osd(int osd) const { + assert(osd >= 0); + int num = 0; + auto it = num_primary_pg_by_osd.find(osd); + if (it != num_primary_pg_by_osd.end()) + num = it->second; + return num; + } + void update_pg(pg_t pgid, bufferlist& bl); void remove_pg(pg_t pgid); void update_osd(int osd, bufferlist& bl);