From 4bd46c5827de029aafd6197c261ce98591dddf5a Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Mon, 4 Mar 2019 17:15:01 +0800 Subject: [PATCH] crimson/osd: add facilities for reporting pg stats Signed-off-by: Kefu Chai --- src/crimson/osd/osd.cc | 19 +++++++++++++++++++ src/crimson/osd/osd.h | 6 +++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/crimson/osd/osd.cc b/src/crimson/osd/osd.cc index 8899fd90304..91ccb2010cd 100644 --- a/src/crimson/osd/osd.cc +++ b/src/crimson/osd/osd.cc @@ -8,6 +8,8 @@ #include "messages/MOSDBeacon.h" #include "messages/MOSDBoot.h" #include "messages/MOSDMap.h" +#include "messages/MPGStats.h" + #include "crimson/net/Connection.h" #include "crimson/net/Messenger.h" #include "crimson/os/cyan_collection.h" @@ -378,6 +380,23 @@ seastar::future<> OSD::ms_handle_remote_reset(ceph::net::ConnectionRef conn) return seastar::now(); } +MessageRef OSD::get_stats() const +{ + // todo: m-to-n: collect stats using map-reduce + // MPGStats::had_map_for is not used since PGMonitor was removed + auto m = make_message(monc->get_fsid(), osdmap->get_epoch()); + + for (auto [pgid, pg] : pgs) { + if (pg->is_primary()) { + auto stats = pg->get_stats(); + // todo: update reported_epoch,reported_seq,last_fresh + stats.reported_epoch = osdmap->get_epoch(); + m->pg_stat.emplace(pgid.pgid, std::move(stats)); + } + } + return m; +} + OSD::cached_map_t OSD::get_map() const { return osdmap; diff --git a/src/crimson/osd/osd.h b/src/crimson/osd/osd.h index 03fdc583bc5..d06bbc938de 100644 --- a/src/crimson/osd/osd.h +++ b/src/crimson/osd/osd.h @@ -11,6 +11,7 @@ #include "crimson/common/simple_lru.h" #include "crimson/common/shared_lru.h" +#include "crimson/mgr/client.h" #include "crimson/mon/MonClient.h" #include "crimson/net/Dispatcher.h" #include "crimson/osd/chained_dispatchers.h" @@ -38,7 +39,8 @@ namespace ceph::os { template using Ref = boost::intrusive_ptr; class OSD : public ceph::net::Dispatcher, - private OSDMapService { + private OSDMapService, + private ceph::mgr::WithStats { seastar::gate gate; const int whoami; const uint32_t nonce; @@ -79,6 +81,8 @@ class OSD : public ceph::net::Dispatcher, seastar::future<> ms_handle_connect(ceph::net::ConnectionRef conn) override; seastar::future<> ms_handle_reset(ceph::net::ConnectionRef conn) override; seastar::future<> ms_handle_remote_reset(ceph::net::ConnectionRef conn) override; + // mgr::WithStats methods + MessageRef get_stats() const override; public: OSD(int id, uint32_t nonce, -- 2.39.5