From: Kefu Chai Date: Thu, 6 Apr 2017 09:26:45 +0000 (+0800) Subject: mgr: move "osd pool stats" to mgr X-Git-Tag: v12.0.2~149^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=db9e5312e874a4024b18daed1d41718cf16976ca;p=ceph.git mgr: move "osd pool stats" to mgr Signed-off-by: Kefu Chai --- diff --git a/src/mgr/MgrCommands.h b/src/mgr/MgrCommands.h index f55161589a1..6278f516360 100644 --- a/src/mgr/MgrCommands.h +++ b/src/mgr/MgrCommands.h @@ -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") diff --git a/src/mon/MonCommands.h b/src/mon/MonCommands.h index 8dc9f511dab..7baa7801666 100644 --- a/src/mon/MonCommands.h +++ b/src/mon/MonCommands.h @@ -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") diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 9175f7b0b55..43606fc99e0 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -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::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 sl; - stringstream tss; - pg_map.pool_recovery_summary(f.get(), &sl, poolid); - if (!f && !sl.empty()) { - for (list::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); diff --git a/src/mon/PGMap.cc b/src/mon/PGMap.cc index 708f2ff233e..bd0bab0a635 100644 --- a/src/mon/PGMap.cc +++ b/src/mon/PGMap.cc @@ -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 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; }