mirror of
https://github.com/XRPLF/rippled.git
synced 2026-08-21 14:20:56 +00:00
The fetch and store duration counters converted each sample to microseconds before adding it, so any backend call finishing in under a microsecond contributed zero. A warm nudb read answers in a few hundred nanoseconds, so on fast hardware every read floored and the totals stayed at zero no matter how many reads happened -- the same loss of resolution the microsecond report was introduced to avoid, one decade lower. Both accumulators now hold nanoseconds, the clock's own resolution, and convert once in getFetchDurationUs() and getStoreDurationUs(). The public accessors, the node_reads_duration_us and node_writes_duration_us JSON fields, and the metrics that read them all keep microseconds, so nothing downstream changes unit. storeDurationStats() takes the raw duration instead of a pre-converted integer so no caller can round early, and updateFetchMetrics() scales its microsecond input to match. FetchReport::elapsed stays microseconds: it carries one fetch, not a total, and that is the unit it declares. The reported sum is therefore the accumulated total minus a sub-microsecond remainder per fetch, so the two tests that asserted exact equality between them now assert that bound. Both had assertions that depended on how fast the host reads; the bound holds on any hardware.