struct ReadLatencyMetric {
utime_t lat;
+ bool updated = false;
DENC(ReadLatencyMetric, v, p) {
- DENC_START(1, 1, p);
+ DENC_START(2, 1, p);
denc(v.lat, p);
+ if (struct_v >= 2)
+ denc(v.updated, p);
DENC_FINISH(p);
}
struct WriteLatencyMetric {
utime_t lat;
+ bool updated = false;
DENC(WriteLatencyMetric, v, p) {
- DENC_START(1, 1, p);
+ DENC_START(2, 1, p);
denc(v.lat, p);
+ if (struct_v >= 2)
+ denc(v.updated, p);
DENC_FINISH(p);
}
struct MetadataLatencyMetric {
utime_t lat;
+ bool updated = false;
DENC(MetadataLatencyMetric, v, p) {
- DENC_START(1, 1, p);
+ DENC_START(2, 1, p);
denc(v.lat, p);
+ if (struct_v >= 2)
+ denc(v.updated, p);
DENC_FINISH(p);
}
c->second = metrics.cap_hit_metric.misses;
break;
case MDSPerformanceCounterType::READ_LATENCY_METRIC:
- c->first = metrics.read_latency_metric.lat.tv.tv_sec;
- c->second = metrics.read_latency_metric.lat.tv.tv_nsec;
+ if (metrics.read_latency_metric.updated) {
+ c->first = metrics.read_latency_metric.lat.tv.tv_sec;
+ c->second = metrics.read_latency_metric.lat.tv.tv_nsec;
+ }
break;
case MDSPerformanceCounterType::WRITE_LATENCY_METRIC:
- c->first = metrics.write_latency_metric.lat.tv.tv_sec;
- c->second = metrics.write_latency_metric.lat.tv.tv_nsec;
+ if (metrics.write_latency_metric.updated) {
+ c->first = metrics.write_latency_metric.lat.tv.tv_sec;
+ c->second = metrics.write_latency_metric.lat.tv.tv_nsec;
+ }
break;
case MDSPerformanceCounterType::METADATA_LATENCY_METRIC:
- c->first = metrics.metadata_latency_metric.lat.tv.tv_sec;
- c->second = metrics.metadata_latency_metric.lat.tv.tv_nsec;
+ if (metrics.metadata_latency_metric.updated) {
+ c->first = metrics.metadata_latency_metric.lat.tv.tv_sec;
+ c->second = metrics.metadata_latency_metric.lat.tv.tv_nsec;
+ }
break;
default:
ceph_abort_msg("unknown counter type");
auto &metrics = it->second.second;
metrics.update_type = UPDATE_TYPE_REFRESH;
metrics.read_latency_metric.lat = payload.lat;
+ metrics.read_latency_metric.updated = true;
}
void MetricsHandler::handle_payload(Session *session, const WriteLatencyPayload &payload) {
auto &metrics = it->second.second;
metrics.update_type = UPDATE_TYPE_REFRESH;
metrics.write_latency_metric.lat = payload.lat;
+ metrics.write_latency_metric.updated = true;
}
void MetricsHandler::handle_payload(Session *session, const MetadataLatencyPayload &payload) {
auto &metrics = it->second.second;
metrics.update_type = UPDATE_TYPE_REFRESH;
metrics.metadata_latency_metric.lat = payload.lat;
+ metrics.metadata_latency_metric.updated = true;
}
void MetricsHandler::handle_payload(Session *session, const UnknownPayload &payload) {