#include "messages/MMonMgrReport.h"
#include "PGMap.h"
-#include "PGMonitor.h"
+#include "PGStatService.h"
#include "include/stringify.h"
#include "mgr/MgrContext.h"
#include "OSDMonitor.h"
bool MgrMonitor::prepare_report(MonOpRequestRef op)
{
MMonMgrReport *m = static_cast<MMonMgrReport*>(op->get_req());
- mon->pgservice->reset(m->pg_map);
+ pgservice->reset(m->pg_map);
return true;
}
{
cancel_timer();
}
+
+PGStatService *MgrMonitor::get_pg_stat_service()
+{
+ if (!pgservice) {
+ pgservice = new PGMapStatService();
+ }
+ return pgservice;
+}
+
+MgrMonitor::~MgrMonitor()
+{
+ delete pgservice;
+}
* Foundation. See file COPYING.
*/
+#ifndef CEPH_MGRMONITOR_H
+#define CEPH_MGRMONITOR_H
#include "include/Context.h"
#include "MgrMap.h"
#include "PaxosService.h"
+class PGStatService;
-class MgrMonitor : public PaxosService
+class MgrMonitor: public PaxosService
{
MgrMap map;
MgrMap pending_map;
utime_t first_seen_inactive;
+ PGStatService *pgservice = nullptr;
+
std::map<uint64_t, ceph::coarse_mono_clock::time_point> last_beacon;
/**
public:
MgrMonitor(Monitor *mn, Paxos *p, const string& service_name)
: PaxosService(mn, p, service_name)
+ : PaxosService(mn, p, service_name),
+ digest_event(nullptr)
{}
+ ~MgrMonitor() override;
void init() override;
void on_shutdown() override;
void print_summary(Formatter *f, std::ostream *ss) const;
+ PGStatService *get_pg_stat_service();
+
friend class C_Updated;
};
+#endif
leader_supported_mon_commands_size(0),
mgr_messenger(mgr_m),
mgr_client(cct_, mgr_m),
- pgservice(new PGMapStatService),
+ pgservice(nullptr),
store(s),
state(STATE_PROBING),
int cmdsize;
get_locally_supported_monitor_commands(&cmds, &cmdsize);
set_leader_supported_commands(cmds, cmdsize);
+
+ pgservice = mgrmon()->get_pg_stat_service();
}
PaxosService *Monitor::get_paxos_service_by_name(const string& name)
#include "Monitor.h"
#include "OSDMonitor.h"
#include "MonitorDBStore.h"
+#include "PGStatService.h"
#include "messages/MPGStats.h"
#include "messages/MPGStatsAck.h"
}
return true;
}
+
+PGStatService *PGMonitor::get_pg_stat_service()
+{
+ if (!pgservice) {
+ pgservice = new PGMapStatService(pg_map);
+ }
+ return pgservice;
+}
+PGMonitor::~PGMonitor()
+{
+ delete pgservice;
+}
class TextTable;
class MPGStats;
+class PGStatService;
class PGMonitor : public PaxosService {
public:
PGMap pg_map;
+ PGStatService *pgservice;
private:
PGMap::Incremental pending_inc;
public:
PGMonitor(Monitor *mn, Paxos *p, const string& service_name)
: PaxosService(mn, p, service_name),
+ pgservice(nullptr),
pgmap_meta_prefix("pgmap_meta"),
pgmap_pg_prefix("pgmap_pg"),
pgmap_osd_prefix("pgmap_osd")
{ }
- ~PGMonitor() override { }
+ ~PGMonitor() override;
void get_store_prefixes(set<string>& s) override {
s.insert(get_service_name());
void check_subs();
bool check_sub(Subscription *sub);
+ PGStatService *get_pg_stat_service();
+
private:
// no copying allowed
PGMonitor(const PGMonitor &rhs);