]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
mgr: move "osd pool stats" to mgr
authorKefu Chai <kchai@redhat.com>
Thu, 6 Apr 2017 09:26:45 +0000 (17:26 +0800)
committerKefu Chai <kchai@redhat.com>
Thu, 6 Apr 2017 11:01:58 +0000 (19:01 +0800)
Signed-off-by: Kefu Chai <kchai@redhat.com>
src/mgr/MgrCommands.h
src/mon/MonCommands.h
src/mon/OSDMonitor.cc
src/mon/PGMap.cc

index f55161589a14bec7061e535393d82066d173520c..6278f516360845660498463fe00f5e34d073c206 100644 (file)
@@ -64,3 +64,7 @@ COMMAND("osd perf", \
 COMMAND("osd blocked-by", \
        "print histogram of which OSDs are blocking their peers", \
        "osd", "r", "cli,rest")
+COMMAND("osd pool stats " \
+        "name=name,type=CephString,req=false",
+        "obtain stats from all pools, or from specified pool",
+        "osd", "r", "cli,rest")
index 8dc9f511dab8b6db34a51c415fba04a0ad218159..7baa780166663f011773b90f46992027618c6834 100644 (file)
@@ -728,10 +728,6 @@ COMMAND("osd pool get-quota " \
         "name=pool,type=CephPoolname ",
         "obtain object or byte limits for pool",
         "osd", "r", "cli,rest")
-COMMAND("osd pool stats " \
-        "name=name,type=CephString,req=false",
-        "obtain stats from all pools, or from specified pool",
-        "osd", "r", "cli,rest")
 COMMAND("osd utilization",
        "get basic pg distribution stats",
        "osd", "r", "cli,rest")
index 9175f7b0b558f0512595d262796254b46d8c6c09..43606fc99e0ad7c06e4edb3f03ad0365b814cb95 100644 (file)
@@ -4601,121 +4601,9 @@ bool OSDMonitor::preprocess_command(MonOpRequestRef op)
     }
     r = 0;
   } else if (prefix == "osd pool stats") {
-    string pool_name;
-    cmd_getval(g_ceph_context, cmdmap, "name", pool_name);
-
-    PGMap& pg_map = mon->pgmon()->pg_map;
-
-    int64_t poolid = -ENOENT;
-    bool one_pool = false;
-    if (!pool_name.empty()) {
-      poolid = osdmap.lookup_pg_pool_name(pool_name);
-      if (poolid < 0) {
-        assert(poolid == -ENOENT);
-        ss << "unrecognized pool '" << pool_name << "'";
-        r = -ENOENT;
-        goto reply;
-      }
-      one_pool = true;
-    }
-
-    stringstream rs;
-
-    if (f)
-      f->open_array_section("pool_stats");
-    if (osdmap.get_pools().size() == 0) {
-      if (!f)
-        ss << "there are no pools!";
-      goto stats_out;
-    }
-
-    for (map<int64_t,pg_pool_t>::const_iterator it = osdmap.get_pools().begin();
-         it != osdmap.get_pools().end();
-         ++it) {
-
-      if (!one_pool)
-        poolid = it->first;
-
-      pool_name = osdmap.get_pool_name(poolid);
-
-      if (f) {
-        f->open_object_section("pool");
-        f->dump_string("pool_name", pool_name.c_str());
-        f->dump_int("pool_id", poolid);
-        f->open_object_section("recovery");
-      }
-
-      list<string> sl;
-      stringstream tss;
-      pg_map.pool_recovery_summary(f.get(), &sl, poolid);
-      if (!f && !sl.empty()) {
-       for (list<string>::iterator p = sl.begin(); p != sl.end(); ++p)
-         tss << "  " << *p << "\n";
-      }
-
-      if (f) {
-        f->close_section();
-        f->open_object_section("recovery_rate");
-      }
-
-      ostringstream rss;
-      pg_map.pool_recovery_rate_summary(f.get(), &rss, poolid);
-      if (!f && !rss.str().empty())
-        tss << "  recovery io " << rss.str() << "\n";
-
-      if (f) {
-        f->close_section();
-        f->open_object_section("client_io_rate");
-      }
-
-      rss.clear();
-      rss.str("");
-
-      pg_map.pool_client_io_rate_summary(f.get(), &rss, poolid);
-      if (!f && !rss.str().empty())
-        tss << "  client io " << rss.str() << "\n";
-
-      // dump cache tier IO rate for cache pool
-      const pg_pool_t *pool = osdmap.get_pg_pool(poolid);
-      if (pool->is_tier()) {
-        if (f) {
-          f->close_section();
-          f->open_object_section("cache_io_rate");
-        }
-
-        rss.clear();
-        rss.str("");
-
-        pg_map.pool_cache_io_rate_summary(f.get(), &rss, poolid);
-        if (!f && !rss.str().empty())
-          tss << "  cache tier io " << rss.str() << "\n";
-      }
-
-      if (f) {
-        f->close_section();
-        f->close_section();
-      } else {
-        rs << "pool " << pool_name << " id " << poolid << "\n";
-        if (!tss.str().empty())
-          rs << tss.str() << "\n";
-        else
-          rs << "  nothing is going on\n\n";
-      }
-
-      if (one_pool)
-        break;
-    }
-
-stats_out:
-    if (f) {
-      f->close_section();
-      f->flush(rdata);
-    } else {
-      rdata.append(rs.str());
-    }
-    rdata.append("\n");
-    r = 0;
-
+    const auto &pgm = mon->pgmon()->pg_map;
+    r = process_pg_map_command(prefix, cmdmap, pgm, osdmap,
+                              f.get(), &ss, &rdata);
   } else if (prefix == "osd pool get-quota") {
     string pool_name;
     cmd_getval(g_ceph_context, cmdmap, "pool", pool_name);
index 708f2ff233e9fd49882cab3bd3b27c9aad20a343..bd0bab0a6355d05ac191c035c28396b9f46a15f6 100644 (file)
@@ -2419,6 +2419,114 @@ int process_pg_map_command(
     return 0;
   }
 
+  if (prefix == "osd pool stats") {
+    string pool_name;
+    cmd_getval(g_ceph_context, cmdmap, "name", pool_name);
+
+    int64_t poolid = -ENOENT;
+    bool one_pool = false;
+    if (!pool_name.empty()) {
+      poolid = osdmap.lookup_pg_pool_name(pool_name);
+      if (poolid < 0) {
+        assert(poolid == -ENOENT);
+        *ss << "unrecognized pool '" << pool_name << "'";
+        return -ENOENT;
+      }
+      one_pool = true;
+    }
+
+    stringstream rs;
+
+    if (f)
+      f->open_array_section("pool_stats");
+    else {
+      if (osdmap.get_pools().empty()) {
+        *ss << "there are no pools!";
+       goto stats_out;
+      }
+    }
+
+    for (auto& p : osdmap.get_pools()) {
+      if (!one_pool)
+        poolid = p.first;
+
+      pool_name = osdmap.get_pool_name(poolid);
+
+      if (f) {
+        f->open_object_section("pool");
+        f->dump_string("pool_name", pool_name.c_str());
+        f->dump_int("pool_id", poolid);
+        f->open_object_section("recovery");
+      }
+
+      list<string> sl;
+      stringstream tss;
+      pg_map.pool_recovery_summary(f, &sl, poolid);
+      if (!f && !sl.empty()) {
+       for (auto& p : sl)
+         tss << "  " << p << "\n";
+      }
+
+      if (f) {
+        f->close_section();
+        f->open_object_section("recovery_rate");
+      }
+
+      ostringstream rss;
+      pg_map.pool_recovery_rate_summary(f, &rss, poolid);
+      if (!f && !rss.str().empty())
+        tss << "  recovery io " << rss.str() << "\n";
+
+      if (f) {
+        f->close_section();
+        f->open_object_section("client_io_rate");
+      }
+      rss.clear();
+      rss.str("");
+
+      pg_map.pool_client_io_rate_summary(f, &rss, poolid);
+      if (!f && !rss.str().empty())
+        tss << "  client io " << rss.str() << "\n";
+
+      // dump cache tier IO rate for cache pool
+      const pg_pool_t *pool = osdmap.get_pg_pool(poolid);
+      if (pool->is_tier()) {
+        if (f) {
+          f->close_section();
+          f->open_object_section("cache_io_rate");
+        }
+        rss.clear();
+        rss.str("");
+
+        pg_map.pool_cache_io_rate_summary(f, &rss, poolid);
+        if (!f && !rss.str().empty())
+          tss << "  cache tier io " << rss.str() << "\n";
+      }
+      if (f) {
+        f->close_section();
+        f->close_section();
+      } else {
+        rs << "pool " << pool_name << " id " << poolid << "\n";
+        if (!tss.str().empty())
+          rs << tss.str() << "\n";
+        else
+          rs << "  nothing is going on\n\n";
+      }
+      if (one_pool)
+        break;
+    }
+
+stats_out:
+    if (f) {
+      f->close_section();
+      f->flush(ds);
+      odata->append(ds);
+    } else {
+      odata->append(rs.str());
+    }
+    return 0;
+  }
+
   return -EOPNOTSUPP;
 }