From d55e9730859aafbd93c7b66fae05e907d28e40e5 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 6 Aug 2014 14:03:41 -0700 Subject: [PATCH] mon/PGMap: track histogram of pg blocked_by Signed-off-by: Sage Weil --- src/mon/PGMap.cc | 15 +++++++++++++++ src/mon/PGMap.h | 4 ++++ 2 files changed, 19 insertions(+) diff --git a/src/mon/PGMap.cc b/src/mon/PGMap.cc index 6ef82ad6c91..dbe78e400ec 100644 --- a/src/mon/PGMap.cc +++ b/src/mon/PGMap.cc @@ -433,6 +433,11 @@ void PGMap::stat_pg_add(const pg_t &pgid, const pg_stat_t &s) if (s.acting_primary >= 0) creating_pgs_by_osd[s.acting_primary].insert(pgid); } + for (vector::const_iterator p = s.blocked_by.begin(); + p != s.blocked_by.end(); + ++p) { + ++blocked_by_sum[*p]; + } } void PGMap::stat_pg_sub(const pg_t &pgid, const pg_stat_t &s) @@ -455,6 +460,16 @@ void PGMap::stat_pg_sub(const pg_t &pgid, const pg_stat_t &s) creating_pgs_by_osd.erase(s.acting_primary); } } + + for (vector::const_iterator p = s.blocked_by.begin(); + p != s.blocked_by.end(); + ++p) { + ceph::unordered_map::iterator q = blocked_by_sum.find(*p); + assert(q != blocked_by_sum.end()); + --q->second; + if (q->second == 0) + blocked_by_sum.erase(q); + } } void PGMap::stat_osd_add(const osd_stat_t &s) diff --git a/src/mon/PGMap.h b/src/mon/PGMap.h index 560290b7533..66d634c3bb1 100644 --- a/src/mon/PGMap.h +++ b/src/mon/PGMap.h @@ -120,6 +120,7 @@ public: pool_stat_t pg_sum; osd_stat_t osd_sum; mutable epoch_t min_last_epoch_clean; + ceph::unordered_map blocked_by_sum; utime_t stamp; @@ -277,6 +278,9 @@ public: void dump_osd_perf_stats(Formatter *f) const; void print_osd_perf_stats(std::ostream *ss) const; + void dump_osd_blocked_by_stats(Formatter *f) const; + void print_osd_blocked_by_stats(std::ostream *ss) const; + void recovery_summary(Formatter *f, ostream *out, const pool_stat_t& delta_sum) const; void overall_recovery_summary(Formatter *f, ostream *out) const; -- 2.47.3