]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr: re-enable mds `scrub status` info in ceph status
authorVenky Shankar <vshankar@redhat.com>
Wed, 15 Jan 2020 15:38:02 +0000 (10:38 -0500)
committerVenky Shankar <vshankar@redhat.com>
Thu, 26 Mar 2020 02:45:13 +0000 (22:45 -0400)
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 <vshankar@redhat.com>
(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
src/mgr/DaemonServer.h
src/mgr/DaemonState.h

index cb57d13e65cfb4b9e680d4e8b739ecd7860cdfc7..ac6e00d512d0af7658d32220ad035b67c67588b3 100644 (file)
@@ -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);
index 80ceaa6b1563f419df2d42b336a5c6650d1e8b94..0bc0ad75cc1860fe25cf73ad80e1eca8d68e3c79 100644 (file)
@@ -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();
index a8c878c73f4ed12a7bab143ea063b85b116e7fdd..0661f61a01ce17ded4e9347f757dab8c5070bc4e 100644 (file)
@@ -147,7 +147,6 @@ class DaemonState
   bool service_daemon = false;
   utime_t service_status_stamp;
   std::map<std::string, std::string> service_status;
-  std::map<std::string, std::string> task_status;
   utime_t last_service_beacon;
 
   // running config