mirror of
https://github.com/XRPLF/rippled.git
synced 2026-07-23 15:10:34 +00:00
Metric-emitting code that first runs during ApplicationImp::setup() (the [rpc_startup] loop) executed while the OTel meter was still empty, because telemetry_ and metricsRegistry_ were started later in start(). A call-site metric macro caches its instrument on first use via std::call_once, so that first pre-meter use latched a null instrument for the process lifetime and the metric silently never recorded (observed: rpc_in_flight_requests, emitted from PerfLogImp::rpcStart, never appeared). Extract telemetry_->start() and the metricsRegistry_->start() block into a new private ApplicationImp::startTelemetry() and call it from setup() just before the [rpc_startup] loop, so the meter is live before any metric-emitting code runs. The call sits after overlay_ (and the other subsystems the observable- gauge callbacks read) is constructed, since starting the metrics reader thread earlier would let its callbacks call getOverlay() before overlay_ exists. perfLog_->start() stays in start() — the macro call sites do not depend on it. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>