]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds,messages: enable beacon to report clients lagginess
authorDhairya Parmar <dparmar@redhat.com>
Thu, 2 Mar 2023 13:07:14 +0000 (18:37 +0530)
committerDhairya Parmar <dparmar@redhat.com>
Fri, 30 Jun 2023 11:06:20 +0000 (16:36 +0530)
using new MDS health metric

Fixes: https://tracker.ceph.com/issues/58023
Signed-off-by: Dhairya Parmar <dparmar@redhat.com>
(cherry picked from commit 5a0e8a7e703495e958ae7aac79bd9a40d86b19d0)

src/mds/Beacon.cc
src/messages/MMDSBeacon.h

index 36ed489a3150950cd3cefef58b649dc15e50b425..76e71f2fe6e556169a3292acf3c2b424015a165f 100644 (file)
@@ -478,6 +478,24 @@ void Beacon::notify_health(MDSRank const *mds)
     MDSHealthMetric m(MDS_HEALTH_CACHE_OVERSIZED, HEALTH_WARN, css->strv());
     health.metrics.push_back(m);
   }
+
+  // Report laggy client(s) due to laggy OSDs
+  {
+    auto&& laggy_clients = mds->server->get_laggy_clients();
+    if (!laggy_clients.empty()) {
+      std::vector<MDSHealthMetric> laggy_clients_metrics;
+      for (const auto& laggy_client: laggy_clients) {
+        CachedStackStringStream css;
+        *css << "Client " << laggy_client << " is laggy; not evicted"
+            << " because some OSD(s) is/are laggy";
+        MDSHealthMetric m(MDS_HEALTH_CLIENTS_LAGGY, HEALTH_WARN, css->strv());
+        laggy_clients_metrics.emplace_back(std::move(m));
+      }
+      auto&& m = laggy_clients_metrics;
+      health.metrics.insert(std::end(health.metrics), std::cbegin(m),
+                            std::cend(m));
+    }
+  }
 }
 
 MDSMap::DaemonState Beacon::get_want_state() const
index bd46926e485a1738419dfebdb664e00e0c1b4b2d..1a60a129c1b175b383f184390bd04bd226d14892 100644 (file)
@@ -45,6 +45,7 @@ enum mds_metric_t {
   MDS_HEALTH_SLOW_REQUEST,
   MDS_HEALTH_CACHE_OVERSIZED,
   MDS_HEALTH_SLOW_METADATA_IO,
+  MDS_HEALTH_CLIENTS_LAGGY,
   MDS_HEALTH_DUMMY, // not a real health warning, for testing
 };
 
@@ -63,6 +64,7 @@ inline const char *mds_metric_name(mds_metric_t m)
   case MDS_HEALTH_SLOW_REQUEST: return "MDS_SLOW_REQUEST";
   case MDS_HEALTH_CACHE_OVERSIZED: return "MDS_CACHE_OVERSIZED";
   case MDS_HEALTH_SLOW_METADATA_IO: return "MDS_SLOW_METADATA_IO";
+  case MDS_HEALTH_CLIENTS_LAGGY: return "MDS_CLIENTS_LAGGY";
   case MDS_HEALTH_DUMMY: return "MDS_DUMMY";
   default:
     return "???";
@@ -97,6 +99,8 @@ inline const char *mds_metric_summary(mds_metric_t m)
     return "%num% MDSs report oversized cache";
   case MDS_HEALTH_SLOW_METADATA_IO:
     return "%num% MDSs report slow metadata IOs";
+  case MDS_HEALTH_CLIENTS_LAGGY:
+    return "%num% client(s) laggy due to laggy OSDs";  
   default:
     return "???";
   }