#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"
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<MPGStats>(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;
#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"
template<typename T> using Ref = boost::intrusive_ptr<T>;
class OSD : public ceph::net::Dispatcher,
- private OSDMapService {
+ private OSDMapService,
+ private ceph::mgr::WithStats {
seastar::gate gate;
const int whoami;
const uint32_t nonce;
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,