From ab49906b7a81f9110145b820db3fb7b69e28032b Mon Sep 17 00:00:00 2001 From: Venky Shankar Date: Thu, 21 Sep 2023 02:14:13 -0400 Subject: [PATCH] mds: adhere to mds_health_summarize_threshold config when reporting laggy clients Signed-off-by: Venky Shankar --- src/mds/Beacon.cc | 29 +++++++++++++++++++---------- src/messages/MMDSBeacon.h | 2 ++ 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/mds/Beacon.cc b/src/mds/Beacon.cc index 4990f0b249f9..c71030d7d211 100644 --- a/src/mds/Beacon.cc +++ b/src/mds/Beacon.cc @@ -506,17 +506,26 @@ void Beacon::notify_health(MDSRank const *mds) return map.any_osd_laggy(); }); auto&& laggy_clients = mds->server->get_laggy_clients(); if (defer_client_eviction && !laggy_clients.empty()) { - std::vector 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)); + if (laggy_clients.size() <= (size_t)g_conf()->mds_health_summarize_threshold) { + std::vector 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)); + } else { + CachedStackStringStream css; + *css << "Many client (" << laggy_clients.size() + << ") are laggy; not evicting since some OSD(s) are laggy"; + MDSHealthMetric m(MDS_HEALTH_CLIENTS_LAGGY_MANY, HEALTH_WARN, css->strv()); + m.metadata["client_count"] = stringify(laggy_clients.size()); + health.metrics.push_back(std::move(m)); } - auto&& m = laggy_clients_metrics; - health.metrics.insert(std::end(health.metrics), std::cbegin(m), - std::cend(m)); } } } diff --git a/src/messages/MMDSBeacon.h b/src/messages/MMDSBeacon.h index d843b0e76610..ba2d52d11ee3 100644 --- a/src/messages/MMDSBeacon.h +++ b/src/messages/MMDSBeacon.h @@ -46,6 +46,7 @@ enum mds_metric_t { MDS_HEALTH_CACHE_OVERSIZED, MDS_HEALTH_SLOW_METADATA_IO, MDS_HEALTH_CLIENTS_LAGGY, + MDS_HEALTH_CLIENTS_LAGGY_MANY, MDS_HEALTH_DUMMY, // not a real health warning, for testing }; @@ -65,6 +66,7 @@ inline const char *mds_metric_name(mds_metric_t m) 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_CLIENTS_LAGGY_MANY: return "MDS_CLIENTS_LAGGY_MANY"; case MDS_HEALTH_DUMMY: return "MDS_DUMMY"; default: return "???"; -- 2.47.3