return map.any_osd_laggy(); });
auto&& laggy_clients = mds->server->get_laggy_clients();
if (defer_client_eviction && !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));
+ if (laggy_clients.size() <= (size_t)g_conf()->mds_health_summarize_threshold) {
+ 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));
+ } 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));
}
}
}
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
};
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 "???";