]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr: expose OSDMap.pool_raw_used_rate
authorJohn Spray <john.spray@redhat.com>
Tue, 3 Apr 2018 11:19:43 +0000 (12:19 +0100)
committerSage Weil <sage@redhat.com>
Tue, 18 Dec 2018 16:50:14 +0000 (10:50 -0600)
Signed-off-by: John Spray <john.spray@redhat.com>
src/mgr/PyOSDMap.cc
src/mon/PGMap.cc
src/osd/OSDMap.cc
src/osd/OSDMap.h
src/pybind/mgr/mgr_module.py

index 4ec585d50fa34620c0a0d625e5f28a8f397a5471..5c249512de020ddb63fe1c30164d6d3437ec426e 100644 (file)
@@ -253,6 +253,23 @@ static PyObject *osdmap_pg_to_up_acting_osds(BasePyOSDMap *self, PyObject *args)
   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"},
@@ -272,6 +289,8 @@ PyMethodDef BasePyOSDMap_methods[] = {
    "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}
 };
 
index 33a20e1611f1a1cbb48a90e90b0b0f7da03253fc..23f34eafb521b8a684c9966d8e7b1d83ef823a84 100644 (file)
@@ -703,37 +703,6 @@ void PGMapDigest::pool_cache_io_rate_summary(Formatter *f, ostream *out,
   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
 {
@@ -826,7 +795,7 @@ void PGMapDigest::dump_pool_stats_full(
       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
@@ -986,7 +955,7 @@ int64_t PGMapDigest::get_pool_free_space(const OSDMap &osd_map,
   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
index 676638fdfbc4323a31191cea41967794b447a530..1b51e2cc3ffecfabed917ffb4bab40a7b281a952 100644 (file)
@@ -5354,3 +5354,34 @@ void OSDMap::get_random_up_osds_by_subtree(int n,     // whoami
   }
 }
 
+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");
+  }
+}
index f0f9e70a647e78cbf66303f1450194270e090c6c..f860cd151085dceec52fd6d72157f5cb0bf172a3 100644 (file)
@@ -1475,6 +1475,9 @@ public:
   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)
index e143468b20dbc55545216fb0f6c3ff20372fc134..964a4612e87013894984430b6830f50c4501e5e3 100644 (file)
@@ -150,6 +150,9 @@ class OSDMap(ceph_module.BasePyOSDMap):
     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):