From 59dac5053d9c8ee9b9bfcec13f9d28d4905f8b58 Mon Sep 17 00:00:00 2001 From: Venky Shankar Date: Wed, 15 Jan 2020 10:38:02 -0500 Subject: [PATCH] mgr: re-enable mds `scrub status` info in ceph status MDS does not register with manager, therefore `task status` (scrub status updates) were not getting displayed in ceph status output. Signed-off-by: Venky Shankar (cherry picked from commit d6ad0a255a27c5e3da20c7ae03066a692a6d49bb) Conflicts: src/mgr/DaemonServer.cc src/mgr/DaemonServer.h mgr/DaemonServer.{h,cc} deals with raw pointers while master uses ref_t<> cast -- adjust to that. a minor conflict in the header and the metrics templatization is not backported to nautilus. also, DaemonKey is a std::pair in nautilus but a struct in master -- that requires a change in referencing daemon type and name. --- src/mgr/DaemonServer.cc | 26 ++++++++++++++++---------- src/mgr/DaemonServer.h | 2 ++ src/mgr/DaemonState.h | 1 - 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/src/mgr/DaemonServer.cc b/src/mgr/DaemonServer.cc index cb57d13e65cfb..ac6e00d512d0a 100644 --- a/src/mgr/DaemonServer.cc +++ b/src/mgr/DaemonServer.cc @@ -534,6 +534,16 @@ bool DaemonServer::handle_close(MMgrClose *m) return true; } +void DaemonServer::update_task_status(DaemonKey key, MMgrReport *m) { + dout(10) << "got task status from " << key << dendl; + + auto p = pending_service_map.get_daemon(key.first, key.second); + if (!map_compare(p.first->task_status, *m->task_status)) { + p.first->task_status = *m->task_status; + pending_service_map_dirty = pending_service_map.epoch; + } +} + bool DaemonServer::handle_report(MMgrReport *m) { DaemonKey key; @@ -637,25 +647,21 @@ bool DaemonServer::handle_report(MMgrReport *m) << " ignored " << daemon->ignored_mon_config << dendl; } + utime_t now = ceph_clock_now(); if (daemon->service_daemon) { - utime_t now = ceph_clock_now(); if (m->daemon_status) { daemon->service_status_stamp = now; daemon->service_status = *m->daemon_status; } - if (m->task_status && !map_compare(daemon->task_status, *m->task_status)) { - auto [d, added] = pending_service_map.get_daemon(m->service_name, - m->daemon_name); - if (!added) { - daemon->task_status = *m->task_status; - d->task_status = *m->task_status; - pending_service_map_dirty = pending_service_map.epoch; - } - } daemon->last_service_beacon = now; } else if (m->daemon_status) { derr << "got status from non-daemon " << key << dendl; } + // update task status + if (m->task_status) { + update_task_status(key, m); + daemon->last_service_beacon = now; + } if (m->get_connection()->peer_is_osd() || m->get_connection()->peer_is_mon()) { // only OSD and MON send health_checks to me now daemon->daemon_health_metrics = std::move(m->daemon_health_metrics); diff --git a/src/mgr/DaemonServer.h b/src/mgr/DaemonServer.h index 80ceaa6b1563f..0bc0ad75cc186 100644 --- a/src/mgr/DaemonServer.h +++ b/src/mgr/DaemonServer.h @@ -122,6 +122,8 @@ private: OSDPerfMetricCollector osd_perf_metric_collector; void handle_osd_perf_metric_query_updated(); + void update_task_status(DaemonKey key, MMgrReport *m); + public: int init(uint64_t gid, entity_addrvec_t client_addrs); void shutdown(); diff --git a/src/mgr/DaemonState.h b/src/mgr/DaemonState.h index a8c878c73f4ed..0661f61a01ce1 100644 --- a/src/mgr/DaemonState.h +++ b/src/mgr/DaemonState.h @@ -147,7 +147,6 @@ class DaemonState bool service_daemon = false; utime_t service_status_stamp; std::map service_status; - std::map task_status; utime_t last_service_beacon; // running config -- 2.39.5