return f.get();
}
+static PyObject *osdmap_pool_raw_used_rate(BasePyOSDMap *self, PyObject *args)
+{
+ int pool_id = 0;
+ if (!PyArg_ParseTuple(args, "i:pool_raw_used_rate",
+ &pool_id)) {
+ return nullptr;
+ }
+
+ if (!self->osdmap->have_pg_pool(pool_id)) {
+ return nullptr;
+ }
+
+ float rate = self->osdmap->pool_raw_used_rate(pool_id);
+
+ return PyFloat_FromDouble(rate);
+}
+
PyMethodDef BasePyOSDMap_methods[] = {
{"_get_epoch", (PyCFunction)osdmap_get_epoch, METH_NOARGS, "Get OSDMap epoch"},
"Calculate up set mappings for all PGs in a pool"},
{"_pg_to_up_acting_osds", (PyCFunction)osdmap_pg_to_up_acting_osds, METH_VARARGS,
"Calculate up+acting OSDs for a PG ID"},
+ {"_pool_raw_used_rate", (PyCFunction)osdmap_pool_raw_used_rate, METH_VARARGS,
+ "Get raw space to logical space ratio"},
{NULL, NULL, 0, NULL}
};
cache_io_rate_summary(f, out, p->second.first, ts->second);
}
-static float pool_raw_used_rate(const OSDMap &osd_map, int64_t poolid)
-{
- const pg_pool_t *pool = osd_map.get_pg_pool(poolid);
-
- switch (pool->get_type()) {
- case pg_pool_t::TYPE_REPLICATED:
- return pool->get_size();
- break;
- case pg_pool_t::TYPE_ERASURE:
- {
- auto& ecp =
- osd_map.get_erasure_code_profile(pool->erasure_code_profile);
- auto pm = ecp.find("m");
- auto pk = ecp.find("k");
- if (pm != ecp.end() && pk != ecp.end()) {
- int k = atoi(pk->second.c_str());
- int m = atoi(pm->second.c_str());
- int mk = m + k;
- ceph_assert(mk != 0);
- ceph_assert(k != 0);
- return (float)mk / k;
- } else {
- return 0.0;
- }
- }
- break;
- default:
- ceph_abort_msg("unrecognized pool type");
- }
-}
-
ceph_statfs PGMapDigest::get_statfs(OSDMap &osdmap,
boost::optional<int64_t> data_pool) const
{
tbl << pool_name
<< pool_id;
}
- float raw_used_rate = ::pool_raw_used_rate(osd_map, pool_id);
+ float raw_used_rate = osd_map.pool_raw_used_rate(pool_id);
dump_object_stat_sum(tbl, f, stat, avail, raw_used_rate, verbose, pool);
if (f) {
f->close_section(); // stats
if (avail < 0)
avail = 0;
- return avail / ::pool_raw_used_rate(osd_map, poolid);
+ return avail / osd_map.pool_raw_used_rate(poolid);
}
int64_t PGMap::get_rule_avail(const OSDMap& osdmap, int ruleno) const
}
}
+float OSDMap::pool_raw_used_rate(int64_t poolid) const
+{
+ const pg_pool_t *pool = get_pg_pool(poolid);
+ assert(pool != nullptr);
+
+ switch (pool->get_type()) {
+ case pg_pool_t::TYPE_REPLICATED:
+ return pool->get_size();
+ break;
+ case pg_pool_t::TYPE_ERASURE:
+ {
+ auto& ecp =
+ get_erasure_code_profile(pool->erasure_code_profile);
+ auto pm = ecp.find("m");
+ auto pk = ecp.find("k");
+ if (pm != ecp.end() && pk != ecp.end()) {
+ int k = atoi(pk->second.c_str());
+ int m = atoi(pm->second.c_str());
+ int mk = m + k;
+ ceph_assert(mk != 0);
+ ceph_assert(k != 0);
+ return (float)mk / k;
+ } else {
+ return 0.0;
+ }
+ }
+ break;
+ default:
+ ceph_abort_msg("unrecognized pool type");
+ }
+}
int parse_osd_id_list(const vector<string>& ls,
set<int> *out,
ostream *ss) const;
+
+ float pool_raw_used_rate(int64_t poolid) const;
+
};
WRITE_CLASS_ENCODER_FEATURES(OSDMap)
WRITE_CLASS_ENCODER_FEATURES(OSDMap::Incremental)
def pg_to_up_acting_osds(self, pool_id, ps):
return self._pg_to_up_acting_osds(pool_id, ps)
+ def pool_raw_used_rate(self, pool_id):
+ return self._pool_raw_used_rate(pool_id)
+
class OSDMapIncremental(ceph_module.BasePyOSDMapIncremental):
def get_epoch(self):