From d9e4d2d05cfe5aa1a9e237c0a36b9f664773d808 Mon Sep 17 00:00:00 2001 From: Igor Fedotov Date: Wed, 21 Apr 2021 00:37:36 +0300 Subject: [PATCH] osd: admin cmd to dump pools statfs Signed-off-by: Igor Fedotov --- src/osd/OSD.cc | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index d7d038efcc6c..ae944a387901 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -3206,6 +3206,30 @@ will start to track new ops received afterwards."; } f->close_section(); // entries f->close_section(); // network_ping_times + } else if (prefix == "dump_pool_statfs") { + lock_guard l(osd_lock); + + int64_t p = 0; + if (!(cmd_getval(cmdmap, "poolid", p))) { + ss << "Error dumping pool statfs: no poolid provided"; + ret = -EINVAL; + goto out; + } + + store_statfs_t st; + bool per_pool_omap_stats = false; + + ret = store->pool_statfs(p, &st, &per_pool_omap_stats); + if (ret < 0) { + ss << "Error dumping pool statfs: " << cpp_strerror(ret); + goto out; + } else { + ss << "dumping pool statfs..."; + f->open_object_section("pool_statfs"); + f->dump_int("poolid", p); + st.dump(f); + f->close_section(); + } } else { ceph_abort_msg("broken asok registration"); } @@ -3908,6 +3932,11 @@ void OSD::final_init() "Dump osd heartbeat network ping times"); ceph_assert(r == 0); + r = admin_socket->register_command( + "dump_pool_statfs name=poolid,type=CephInt,req=true", asok_hook, + "Dump store's statistics for the given pool"); + ceph_assert(r == 0); + test_ops_hook = new TestOpsSocketHook(&(this->service), this->store); // Note: pools are CephString instead of CephPoolname because // these commands traditionally support both pool names and numbers -- 2.47.3