return pool_stat_t();
}
+ const osd_stat_t& get_osd_sum() const {
+ return osd_sum;
+ }
+
+ const osd_stat_t *get_osd_stat(int osd) const {
+ auto i = osd_stat.find(osd);
+ if (i == osd_stat.end()) {
+ return nullptr;
+ }
+ return &i->second;
+ }
+
void update_pg(pg_t pgid, bufferlist& bl);
void remove_pg(pg_t pgid);
Formatter *f);
}
-
-class PGMapStatService : virtual public PGStatService {
-protected:
- const PGMap& pgmap;
-public:
- PGMapStatService(const PGMap& o)
- : pgmap(o) {}
-
- bool is_readable() const override { return true; }
-
- const pool_stat_t* get_pool_stat(int64_t poolid) const override {
- auto i = pgmap.pg_pool_sum.find(poolid);
- if (i != pgmap.pg_pool_sum.end()) {
- return &i->second;
- }
- return nullptr;
- }
-
- const osd_stat_t& get_osd_sum() const override { return pgmap.osd_sum; }
-
- const osd_stat_t *get_osd_stat(int osd) const override {
- auto i = pgmap.osd_stat.find(osd);
- if (i == pgmap.osd_stat.end()) {
- return nullptr;
- }
- return &i->second;
- }
- const mempool::pgmap::unordered_map<int32_t,osd_stat_t>& get_osd_stat() const override {
- return pgmap.osd_stat;
- }
- float get_full_ratio() const override { return pgmap.full_ratio; }
- float get_nearfull_ratio() const override { return pgmap.nearfull_ratio; }
-
- bool have_creating_pgs() const override {
- return !pgmap.creating_pgs.empty();
- }
- bool is_creating_pg(pg_t pgid) const override {
- return pgmap.creating_pgs.count(pgid);
- }
-
- epoch_t get_min_last_epoch_clean() const override {
- return pgmap.get_min_last_epoch_clean();
- }
-
- bool have_full_osds() const override { return !pgmap.full_osds.empty(); }
- bool have_nearfull_osds() const override {
- return !pgmap.nearfull_osds.empty();
- }
-
- size_t get_num_pg_by_osd(int osd) const override {
- return pgmap.get_num_pg_by_osd(osd);
- }
- ceph_statfs get_statfs(OSDMap& osd_map,
- boost::optional<int64_t> data_pool) const override {
- ceph_statfs statfs;
- statfs.kb = pgmap.osd_sum.kb;
- statfs.kb_used = pgmap.osd_sum.kb_used;
- statfs.kb_avail = pgmap.osd_sum.kb_avail;
- statfs.num_objects = pgmap.pg_sum.stats.sum.num_objects;
- return statfs;
- }
- void print_summary(Formatter *f, ostream *out) const override {
- pgmap.print_summary(f, out);
- }
- virtual void dump_info(Formatter *f) const override {
- f->dump_object("pgmap", pgmap);
- }
- void dump_fs_stats(stringstream *ss,
- Formatter *f,
- bool verbose) const override {
- pgmap.dump_fs_stats(ss, f, verbose);
- }
- void dump_pool_stats(const OSDMap& osdm, stringstream *ss, Formatter *f,
- bool verbose) const override {
- pgmap.dump_pool_stats_full(osdm, ss, f, verbose);
- }
-
- int process_pg_command(const string& prefix,
- const map<string,cmd_vartype>& cmdmap,
- const OSDMap& osdmap,
- Formatter *f,
- stringstream *ss,
- bufferlist *odata) const override {
- return process_pg_map_command(prefix, cmdmap, pgmap, osdmap, f, ss, odata);
- }
-};
-
-
#endif
#include "crush/CrushTreeDumper.h"
#include "common/Clock.h"
-#include "mon/PGStatService.h"
-
+#include "mon/PGMap.h"
+
#define dout_subsys ceph_subsys_osd
MEMPOOL_DEFINE_OBJECT_FACTORY(OSDMap, osdmap, osdmap);
typedef CrushTreeDumper::Dumper<F> Parent;
OSDUtilizationDumper(const CrushWrapper *crush, const OSDMap *osdmap_,
- const PGStatService *pgs_, bool tree_) :
+ const PGMap& pgmap_, bool tree_) :
Parent(crush, osdmap_->get_pool_names()),
osdmap(osdmap_),
- pgs(pgs_),
+ pgmap(pgmap_),
tree(tree_),
average_util(average_utilization()),
min_var(-1),
if (average_util)
var = util / average_util;
- size_t num_pgs = qi.is_bucket() ? 0 : pgs->get_num_pg_by_osd(qi.id);
+ size_t num_pgs = qi.is_bucket() ? 0 : pgmap.get_num_pg_by_osd(qi.id);
dump_item(qi, reweight, kb, kb_used, kb_avail, util, var, num_pgs, f);
bool get_osd_utilization(int id, int64_t* kb, int64_t* kb_used,
int64_t* kb_avail) const {
- const osd_stat_t *p = pgs->get_osd_stat(id);
+ const osd_stat_t *p = pgmap.get_osd_stat(id);
if (!p) return false;
*kb = p->kb;
*kb_used = p->kb_used;
protected:
const OSDMap *osdmap;
- const PGStatService *pgs;
+ const PGMap& pgmap;
bool tree;
double average_util;
double min_var;
typedef OSDUtilizationDumper<TextTable> Parent;
OSDUtilizationPlainDumper(const CrushWrapper *crush, const OSDMap *osdmap,
- const PGStatService *pgs, bool tree) :
- Parent(crush, osdmap, pgs, tree) {}
+ const PGMap& pgmap, bool tree) :
+ Parent(crush, osdmap, pgmap, tree) {}
void dump(TextTable *tbl) {
tbl->define_column("ID", TextTable::LEFT, TextTable::RIGHT);
*tbl << ""
<< ""
<< "" << "TOTAL"
- << si_t(pgs->get_osd_sum().kb << 10)
- << si_t(pgs->get_osd_sum().kb_used << 10)
- << si_t(pgs->get_osd_sum().kb_avail << 10)
+ << si_t(pgmap.get_osd_sum().kb << 10)
+ << si_t(pgmap.get_osd_sum().kb_used << 10)
+ << si_t(pgmap.get_osd_sum().kb_avail << 10)
<< lowprecision_t(average_util)
<< ""
<< TextTable::endrow;
typedef OSDUtilizationDumper<Formatter> Parent;
OSDUtilizationFormatDumper(const CrushWrapper *crush, const OSDMap *osdmap,
- const PGStatService *pgs, bool tree) :
- Parent(crush, osdmap, pgs, tree) {}
+ const PGMap& pgmap, bool tree) :
+ Parent(crush, osdmap, pgmap, tree) {}
void dump(Formatter *f) {
f->open_array_section("nodes");
public:
void summary(Formatter *f) {
f->open_object_section("summary");
- f->dump_int("total_kb", pgs->get_osd_sum().kb);
- f->dump_int("total_kb_used", pgs->get_osd_sum().kb_used);
- f->dump_int("total_kb_avail", pgs->get_osd_sum().kb_avail);
+ f->dump_int("total_kb", pgmap.get_osd_sum().kb);
+ f->dump_int("total_kb_used", pgmap.get_osd_sum().kb_used);
+ f->dump_int("total_kb_avail", pgmap.get_osd_sum().kb_avail);
f->dump_float("average_utilization", average_util);
f->dump_float("min_var", min_var);
f->dump_float("max_var", max_var);
};
void print_osd_utilization(const OSDMap& osdmap,
- const PGStatService *pgstat,
+ const PGMap& pgmap,
ostream& out,
Formatter *f,
bool tree)
const CrushWrapper *crush = osdmap.crush.get();
if (f) {
f->open_object_section("df");
- OSDUtilizationFormatDumper d(crush, &osdmap, pgstat, tree);
+ OSDUtilizationFormatDumper d(crush, &osdmap, pgmap, tree);
d.dump(f);
d.summary(f);
f->close_section();
f->flush(out);
} else {
- OSDUtilizationPlainDumper d(crush, &osdmap, pgstat, tree);
+ OSDUtilizationPlainDumper d(crush, &osdmap, pgmap, tree);
TextTable tbl;
d.dump(&tbl);
out << tbl << d.summary() << "\n";