From 385cda10a246fbf3ed3b1d5f27072fce524b0ed0 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 15 Sep 2017 23:07:38 -0400 Subject: [PATCH] osd/PG: add get_pg_stats() to public interface Signed-off-by: Sage Weil --- src/osd/OSD.cc | 13 +++++-------- src/osd/PG.cc | 9 +++++++++ src/osd/PG.h | 2 ++ 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 9a4143943b6..824d345ab1c 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -2579,14 +2579,11 @@ int OSD::init() continue; } - pg->pg_stats_publish_lock.Lock(); - if (pg->pg_stats_publish_valid) { - m->pg_stat[pg->pg_id.pgid] = pg->pg_stats_publish; - const auto lec = pg->pg_stats_publish.get_effective_last_epoch_clean(); - min_last_epoch_clean = min(min_last_epoch_clean, lec); - min_last_epoch_clean_pgs.push_back(pg->pg_id.pgid); - } - pg->pg_stats_publish_lock.Unlock(); + pg->get_pg_stats([&](const pg_stat_t& s, epoch_t lec) { + m->pg_stat[pg->pg_id.pgid] = s; + min_last_epoch_clean = min(min_last_epoch_clean, lec); + min_last_epoch_clean_pgs.push_back(pg->pg_id.pgid); + }); } return m; diff --git a/src/osd/PG.cc b/src/osd/PG.cc index 56d055a077a..7286c0b1a88 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -8141,3 +8141,12 @@ void PG::dump_pgstate_history(Formatter *f) pgstate_history.dump(f); unlock(); } + +void PG::get_pg_stats(std::function f) +{ + pg_stats_publish_lock.Lock(); + if (pg_stats_publish_valid) { + f(pg_stats_publish, pg_stats_publish.get_effective_last_epoch_clean()); + } + pg_stats_publish_lock.Unlock(); +} diff --git a/src/osd/PG.h b/src/osd/PG.h index 28f3739a576..402d52a7b64 100644 --- a/src/osd/PG.h +++ b/src/osd/PG.h @@ -384,6 +384,8 @@ public: void dump_pgstate_history(Formatter *f); + void get_pg_stats(std::function f); + virtual void do_request( OpRequestRef& op, ThreadPool::TPHandle &handle -- 2.39.5