Skip to content

fix(datadog): fix encoder deadlock under bursty v3 metrics - #2229

Draft
tobz wants to merge 1 commit into
rayz/test-v3-endpoint-aware-encoder-selectionfrom
tobz/dd-metrics-encoder-fix-burst-deadlock
Draft

fix(datadog): fix encoder deadlock under bursty v3 metrics#2229
tobz wants to merge 1 commit into
rayz/test-v3-endpoint-aware-encoder-selectionfrom
tobz/dd-metrics-encoder-fix-burst-deadlock

Conversation

@tobz

@tobz tobz commented Jul 29, 2026

Copy link
Copy Markdown
Member

Summary

Change Type

  • Bug fix
  • New feature
  • Non-functional (chore, refactoring, docs)
  • Performance

How did you test this PR?

References

tobz commented Jul 29, 2026

Copy link
Copy Markdown
Member Author

Warning

This pull request is not mergeable via GitHub because a downstack PR is open. Once all requirements are satisfied, merge this PR as a stack on Graphite.
Learn more

This stack of pull requests is managed by Graphite. Learn more about stacking.

@pr-commenter

pr-commenter Bot commented Jul 29, 2026

Copy link
Copy Markdown

Binary Size Analysis (Agent Data Plane)

Baseline: 032b9ac · Comparison: 8ec3099 · diff
Analysis Configuration: stripped binaries · Pass/Fail Threshold: +5%
Sizes: 40.83 MiB (baseline) vs 40.82 MiB (comparison)
Size Change: -13.18 KiB (-0.03%)

✅ Binary size difference within threshold

Changes by Module
Module File Size Symbols
tracing -112.91 KiB 39
saluki_common::resource_tracking::groups +98.94 KiB 22
saluki_components::common::datadog +40.22 KiB 112
figment -37.57 KiB 157
saluki_components::encoders::datadog +24.43 KiB 93
tokio -22.46 KiB 579
anon.1c766fa05dd13eba06da95c69824d6af.995.llvm.16845278109024732812 -17.36 KiB 1
anon.1c5af32c575c0d14ae778d58023b5abf.0.llvm.10081054402879163701 +17.36 KiB 1
anon.1c766fa05dd13eba06da95c69824d6af.995.llvm.2183139281678763661 +17.36 KiB 1
hashbrown +17.28 KiB 181
anon.ad88aefe8160b8dedfdf5305e59f030a.513.llvm.6948463008055664385 -17.27 KiB 1
hyper +16.68 KiB 93
axum -15.11 KiB 107
serde_core +14.54 KiB 189
hyper_util -14.08 KiB 8
core -14.03 KiB 2774
saluki_common::cache::CacheBuilder<K,V,W,H> -13.58 KiB 3
saluki_components::sources::otlp +13.32 KiB 32
chrono -12.96 KiB 10
tokio_rustls -12.72 KiB 12
Detailed Symbol Changes
    FILE SIZE        VM SIZE    
 --------------  -------------- 
  [NEW] +61.4Ki  [NEW] +61.3Ki    saluki_components::common::datadog::io::run_endpoint_io_loop::_{{closure}}::h9313854c2f2a044f
  [NEW] +33.9Ki  [NEW] +33.6Ki    _<saluki_components::common::datadog::config::_::<impl serde_core::de::Deserialize for saluki_components::common::datadog::config::ForwarderConfiguration>::deserialize::__Visitor as serde_core::de::Visitor>::visit_map::h215858157e52a210
  +0.3% +32.7Ki  +0.0% +1.83Ki    [15695 Others]
  [NEW] +17.9Ki  [NEW] +17.7Ki    saluki_components::encoders::datadog::metrics::encode_and_flush_v3_payload_requests::_{{closure}}::hbbcbc6fe0e18aea2
  [NEW] +17.4Ki  [NEW]     +76    anon.1c5af32c575c0d14ae778d58023b5abf.0.llvm.10081054402879163701
  [NEW] +17.4Ki  [NEW] +17.3Ki    anon.1c766fa05dd13eba06da95c69824d6af.995.llvm.2183139281678763661
  [NEW] +13.0Ki  [NEW] +12.9Ki    _<saluki_common::resource_tracking::groups::Tracked<Inner> as core::future::future::Future>::poll::hb237d9782d5fe43d
  [NEW] +12.7Ki  [NEW] +12.5Ki    _<saluki_components::encoders::datadog::metrics::DatadogMetricsConfiguration as saluki_core::components::encoders::builder::EncoderBuilder>::build::_{{closure}}::h5ca37cf4fddb78c4
 +24e2% +12.6Ki +40e2% +12.6Ki    _<saluki_components::transforms::trace_obfuscation::TraceObfuscation as saluki_core::components::transforms::SynchronousTransform>::transform_buffer::h4694da026393f90f
  [DEL] -12.2Ki  [DEL] -12.0Ki    saluki_components::encoders::datadog::metrics::encode_v3_payload_requests::_{{closure}}::h3df3e9d9de0b5978
  [DEL] -12.2Ki  [DEL]     -81    anon.ad88aefe8160b8dedfdf5305e59f030a.665.llvm.6948463008055664385
  [DEL] -12.4Ki  [DEL] -12.3Ki    _<chrono::format::formatting::DelayedFormat<I> as core::fmt::Display>::fmt::h46581aaf02582bbc
  [DEL] -13.5Ki  [DEL] -13.4Ki    _<tracing::instrument::Instrumented<T> as core::future::future::Future>::poll::h0a965208a434db48
 -98.3% -14.2Ki -99.7% -14.2Ki    _<saluki_components::transforms::trace_sampler::TraceSampler as saluki_core::components::transforms::SynchronousTransform>::transform_buffer::hd2ecf69cf1bd8db4
  [DEL] -14.3Ki  [DEL] -14.1Ki    _<figment::value::de::ConfiguredValueDe<I> as serde_core::de::Deserializer>::deserialize_any::h2e163da9da896fb8
  [DEL] -14.9Ki  [DEL] -14.8Ki    _<figment::value::de::ConfiguredValueDe<I> as serde_core::de::Deserializer>::deserialize_struct::ha36113e815a9c1ca
  [DEL] -17.3Ki  [DEL]     -76    anon.ad88aefe8160b8dedfdf5305e59f030a.513.llvm.6948463008055664385
  [DEL] -17.4Ki  [DEL] -17.3Ki    anon.1c766fa05dd13eba06da95c69824d6af.995.llvm.16845278109024732812
  [DEL] -19.6Ki  [DEL] -19.5Ki    saluki_components::transforms::apm_stats::ApmStats::process_trace::h0c7467fe110ac0a8
  [DEL] -24.3Ki  [DEL] -24.2Ki    saluki_components::transforms::trace_obfuscation::TraceObfuscation::obfuscate_span::hca56db06df8fb52f
  [DEL] -59.9Ki  [DEL] -59.7Ki    saluki_components::common::datadog::io::run_endpoint_io_loop::_{{closure}}::h3e35c9d992da4100
  -0.0% -13.2Ki  -0.1% -31.8Ki    TOTAL

@datadog-prod-us1-4

Copy link
Copy Markdown

Pipelines

Unblock PR with BitsAI

⚠️ Warnings

🚦 1 Pipeline job failed

DataDog/saluki | run-benchmarks-adp   View in Datadog   GitLab

Useful? React with 👍 / 👎

This comment will be updated automatically if new data arrives.
🔗 Commit SHA: 8ec3099 | Docs | Datadog PR Page | Give us feedback!

@pr-commenter

pr-commenter Bot commented Jul 29, 2026

Copy link
Copy Markdown

Regression Detector (Agent Data Plane)

Run ID: 33891651-eec7-4b20-8b1c-57b9bfe68419
Baseline: 032b9ac5 · Comparison: 8ec30999 · diff

Optimization Goals: ❌ 2 regressions detected

experiment goal Δ mean % links
quality_gates_rss_dsd_ultraheavy (erratic) memory 🔴 +11.02 metrics profiles logs
quality_gates_rss_dsd_heavy (erratic) memory 🔴 +8.19 metrics profiles logs
Fine details of change detection per experiment (3)

Experiments configured erratic: true are tagged (ignored) and skipped when determining which experiments regressed or improved. Experiments which are detected as erratic at runtime are tagged (erratic) to flag that the run's sample dispersion was high, but their regression / improvement signal still counts.

experiment goal Δ mean % links
quality_gates_rss_dsd_medium (erratic) memory ⚪ +2.40 metrics profiles logs
quality_gates_rss_idle memory ⚪ +0.60 metrics profiles logs
quality_gates_rss_dsd_low memory ⚪ +0.18 metrics profiles logs
Bounds Checks: ❌ Failed (5)
experiment check replicates observed links
quality_gates_rss_dsd_heavy memory_usage 0/10 ❌ 214 MiB ≤ 140 MiB metrics profiles logs
quality_gates_rss_dsd_low memory_usage 0/10 ❌ 52 MiB ≤ 50 MiB metrics profiles logs
quality_gates_rss_dsd_medium memory_usage 0/10 ❌ 89.3 MiB ≤ 75 MiB metrics profiles logs
quality_gates_rss_dsd_ultraheavy memory_usage 0/10 ❌ 292 MiB ≤ 200 MiB metrics profiles logs
quality_gates_rss_idle memory_usage 10/10 ✅ 31.4 MiB ≤ 40 MiB metrics profiles logs
Explanation

A change is flagged as a regression when |Δ mean %| > 5.00% in the regressing direction for its optimization goal AND SMP marks the experiment as a regression (is_regression: true). Improvements use the matching criteria for the improving direction. Experiments configured erratic: true (tagged (ignored)) are skipped outright; experiments detected as erratic at runtime (tagged (erratic)) still count, since that flag describes sample dispersion rather than directional certainty. The Δ mean % cell is colored accordingly: 🟢 = improvement, 🔴 = regression, ⚪ = neutral. Reduction in CPU or memory is an improvement; reduction in ingress throughput is a regression.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/components Sources, transforms, and destinations. encoder/datadog-metrics Datadog Metrics encoder.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant