@@ -597,6 +597,11 @@ InstanceImpl::PendingRequest::PendingRequest(InstanceImpl::ThreadLocalPool& pare
597597 if (shard_scope_ && parent_.config_ ->enableCommandStats ()) {
598598 command_ = parent_.redis_command_stats_ ->getCommandFromRequest (getRequest (incoming_request_));
599599 parent_.redis_command_stats_ ->updateStatsTotal (*shard_scope_, command_);
600+ // Create per-shard per-command latency timer when both command stats and per-shard latency are enabled
601+ if (parent_.config_ ->enablePerShardLatencyStats ()) {
602+ command_latency_timer_ = parent_.redis_command_stats_ ->createCommandTimer (
603+ *shard_scope_, command_, parent_.dispatcher_ .timeSource ());
604+ }
600605 }
601606}
602607
@@ -639,6 +644,8 @@ void InstanceImpl::PendingRequest::onResponse(Common::Redis::RespValuePtr&& resp
639644 end_time - start_time_).count ();
640645 latency_histogram_->recordValue (latency_us);
641646 }
647+ // Complete per-shard per-command latency timer (auto-records on destruction)
648+ command_latency_timer_.reset ();
642649 pool_callbacks_.onResponse (std::move (response));
643650 parent_.onRequestCompleted ();
644651}
@@ -661,6 +668,8 @@ void InstanceImpl::PendingRequest::onFailure() {
661668 end_time - start_time_).count ();
662669 latency_histogram_->recordValue (latency_us);
663670 }
671+ // Complete per-shard per-command latency timer (auto-records on destruction)
672+ command_latency_timer_.reset ();
664673 pool_callbacks_.onFailure ();
665674 parent_.refresh_manager_ ->onFailure (parent_.cluster_name_ );
666675 parent_.onRequestCompleted ();
0 commit comments