From c01edb8e5b925d82762d37c8867dde5448310b9d Mon Sep 17 00:00:00 2001 From: Milan Garnier Date: Tue, 28 Jul 2026 18:33:38 +0200 Subject: [PATCH] fix(sampling): record rate limiter's effective rate on allow, not just drop dd-trace-rb and dd-trace-go both stamp the rate limiter's effective rate unconditionally once the limiter is consulted, regardless of allow/drop. libdatadog only recorded it on drop, diverging from other tracers. --- libdd-sampling/src/datadog_sampler.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/libdd-sampling/src/datadog_sampler.rs b/libdd-sampling/src/datadog_sampler.rs index 67e08fdc1a..e74f16347d 100644 --- a/libdd-sampling/src/datadog_sampler.rs +++ b/libdd-sampling/src/datadog_sampler.rs @@ -155,10 +155,13 @@ impl DatadogSampler { if !rule.sample(trace_id) { is_keep = false; - } else if !self.rate_limiter.is_allowed() { - // Rule kept the span, but the rate limiter dropped it. - is_keep = false; + } else { + // Record the limiter's effective rate whether it allows or drops the trace. + let allowed = self.rate_limiter.is_allowed(); rl_effective_rate = Some(self.rate_limiter.effective_rate()); + if !allowed { + is_keep = false; + } } } else { let service_key = self.service_key(span);