From 3e056ca5c6d2359ff585b3c4223506992b96e857 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 10 Mar 2020 09:26:22 -0500 Subject: [PATCH] mgr: add 'mgr_status' tell command For now just dump the mgrmap_epoch Signed-off-by: Sage Weil --- src/mgr/Mgr.cc | 32 ++++++++++++++++++++++++++++++++ src/mgr/Mgr.h | 9 ++++++++- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/src/mgr/Mgr.cc b/src/mgr/Mgr.cc index 367942717e337..b36320edb1377 100644 --- a/src/mgr/Mgr.cc +++ b/src/mgr/Mgr.cc @@ -324,6 +324,12 @@ void Mgr::init() cluster_state.final_init(); + AdminSocket *admin_socket = g_ceph_context->get_admin_socket(); + r = admin_socket->register_command( + "mgr_status", this, + "Dump mgr status"); + ceph_assert(r == 0); + dout(4) << "Complete." << dendl; initializing = false; initialized = true; @@ -687,3 +693,29 @@ std::map Mgr::get_services() const return py_module_registry->get_services(); } +int Mgr::call( + std::string_view admin_command, + const cmdmap_t& cmdmap, + Formatter *f, + std::ostream& errss, + bufferlist& out) +{ + try { + if (admin_command == "mgr_status") { + f->open_object_section("mgr_status"); + cluster_state.with_mgrmap( + [f](const MgrMap& mm) { + f->dump_unsigned("mgrmap_epoch", mm.get_epoch()); + }); + f->dump_bool("initialized", initialized); + f->close_section(); + return 0; + } else { + return -ENOSYS; + } + } catch (const TOPNSPC::common::bad_cmd_get& e) { + errss << e.what(); + return -EINVAL; + } + return 0; +} diff --git a/src/mgr/Mgr.h b/src/mgr/Mgr.h index 9a712edcc7648..157105d788e7c 100644 --- a/src/mgr/Mgr.h +++ b/src/mgr/Mgr.h @@ -37,7 +37,7 @@ class MServiceMap; class Objecter; class Client; -class Mgr { +class Mgr : public AdminSocketHook { protected: MonClient *monc; Objecter *objecter; @@ -97,6 +97,13 @@ public: void handle_signal(int signum); std::map get_services() const; + + int call( + std::string_view command, + const cmdmap_t& cmdmap, + Formatter *f, + std::ostream& errss, + ceph::buffer::list& out) override; }; /** -- 2.39.5