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
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
};
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 "???";
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 "???";
}