Skip to content

fix(trace-exporter): mark OTLP client-computed stats - #2245

Merged
gh-worker-dd-mergequeue-cf854d[bot] merged 1 commit into
mainfrom
bengl/otlp-client-computed-stats
Aug 14, 2026
Merged

gh-worker-dd-mergequeue-cf854d[bot] merged 1 commit into
mainfrom
bengl/otlp-client-computed-stats

Conversation

@bengl

@bengl bengl commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

What does this PR do?

Marks OTLP trace exports as client-computed when tracer metadata already says stats were computed client-side.

This sets both:

  • the OTLP Resource attribute _dd.stats_computed=true
  • the direct Agent request header datadog-client-computed-stats: yes

when either metadata.client_computed_stats or libdatadog's native OTLP stats worker is enabled.

Motivation

dd-trace-js computes OTLP span metrics in JS and passes that state through set_client_computed_stats(). The OTLP trace exporter only looked at otlp_stats_enabled, so Resources sent by JS-backed stats did not carry _dd.stats_computed=true and system-tests rejected the payload.

Additional Notes

The native OTLP stats worker path remains unchanged because otlp_stats_enabled still sets the same Resource attribute and header.

How to test the change?

cargo test -p libdd-data-pipeline --test test_trace_exporter_otlp_export -- --nocapture

Result: 2 passed.

@datadog-prod-us1-4

datadog-prod-us1-4 Bot commented Jul 16, 2026 •

Copy link
Copy Markdown

Tests

🎉 All green!

🧪 All tests passed
❄️ No new flaky tests detected

🎯 Code Coverage (details)
• Patch Coverage: 100.00%
• Overall Coverage: 76.50% (+0.00%)

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

@pr-commenter

pr-commenter Bot commented Jul 16, 2026 •

Copy link
Copy Markdown

Benchmarks

Comparison

Benchmark execution time: 2026-08-14 08:47:52

Comparing candidate commit f1d5c6f in PR branch bengl/otlp-client-computed-stats with baseline commit 3e3454a in branch main.

Found 2 performance improvements and 0 performance regressions! Performance is the same for 22 metrics, 0 unstable metrics.

Explanation

This is an A/B test comparing a candidate commit's performance against that of a baseline commit. Performance changes are noted in the tables below as:

  • 🟩 = significantly better candidate vs. baseline
  • 🟥 = significantly worse candidate vs. baseline

We compute a confidence interval (CI) over the relative difference of means between metrics from the candidate and baseline commits, considering the baseline as the reference.

If the CI is entirely outside the configured SIGNIFICANT_IMPACT_THRESHOLD (or the deprecated UNCONFIDENCE_THRESHOLD), the change is considered significant.

Feel free to reach out to #apm-benchmarking-platform on Slack if you have any questions.

More details about the CI and significant changes

You can imagine this CI as a range of values that is likely to contain the true difference of means between the candidate and baseline commits.

CIs of the difference of means are often centered around 0%, because often changes are not that big:

---------------------------------(------|---^--------)-------------------------------->
                              -0.6%    0%  0.3%     +1.2%
                                 |          |        |
         lower bound of the CI --'          |        |
sample mean (center of the CI) -------------'        |
         upper bound of the CI ----------------------'

As described above, a change is considered significant if the CI is entirely outside the configured SIGNIFICANT_IMPACT_THRESHOLD (or the deprecated UNCONFIDENCE_THRESHOLD).

For instance, for an execution time metric, this confidence interval indicates a significantly worse performance:

----------------------------------------|---------|---(---------^---------)---------->
                                       0%        1%  1.3%      2.2%      3.1%
                                                  |   |         |         |
       significant impact threshold --------------'   |         |         |
                      lower bound of CI --------------'         |         |
       sample mean (center of the CI) --------------------------'         |
                      upper bound of CI ----------------------------------'

scenario:trace_buffer/4_senders/no_delay

  • 🟩 execution_time [-190.240µs; -157.982µs] or [-7.824%; -6.497%]
  • 🟩 throughput [+103825.015op/s; +125379.886op/s] or [+7.005%; +8.459%]

Candidate

Candidate benchmark details

Group 1

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz f1d5c6f 1786696496 bengl/otlp-client-computed-stats
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
trace_buffer/1_senders/10us_delay execution_time 56.294ms 56.643ms ± 0.156ms 56.632ms ± 0.105ms 56.736ms 56.891ms 57.057ms 57.205ms 1.01% 0.697 0.580 0.27% 0.011ms 1 200
trace_buffer/1_senders/10us_delay throughput 15732.911op/s 15889.181op/s ± 43.560op/s 15892.046op/s ± 29.379op/s 15921.352op/s 15952.262op/s 15970.929op/s 15987.403op/s 0.60% -0.680 0.543 0.27% 3.080op/s 1 200
trace_buffer/1_senders/1us_delay execution_time 49.970ms 50.081ms ± 0.031ms 50.083ms ± 0.014ms 50.094ms 50.140ms 50.158ms 50.183ms 0.20% 0.268 0.864 0.06% 0.002ms 1 200
trace_buffer/1_senders/1us_delay throughput 17934.362op/s 17970.873op/s ± 11.243op/s 17970.111op/s ± 5.124op/s 17976.585op/s 17988.218op/s 17989.943op/s 18010.752op/s 0.23% -0.262 0.864 0.06% 0.795op/s 1 200
trace_buffer/1_senders/no_delay execution_time 333.915µs 339.966µs ± 4.859µs 339.246µs ± 2.087µs 341.698µs 345.216µs 353.654µs 388.149µs 14.42% 5.426 47.538 1.43% 0.344µs 1 200
trace_buffer/1_senders/no_delay throughput 2318697.201op/s 2647828.797op/s ± 35315.538op/s 2652943.550op/s ± 16322.100op/s 2667365.031op/s 2682068.936op/s 2685350.645op/s 2695294.431op/s 1.60% -4.650 37.106 1.33% 2497.186op/s 1 200
trace_buffer/2_senders/10us_delay execution_time 56.969ms 57.375ms ± 0.151ms 57.377ms ± 0.112ms 57.495ms 57.598ms 57.692ms 57.816ms 0.76% -0.049 -0.393 0.26% 0.011ms 1 200
trace_buffer/2_senders/10us_delay throughput 31133.109op/s 31372.612op/s ± 82.445op/s 31371.207op/s ± 61.091op/s 31429.288op/s 31509.098op/s 31528.477op/s 31596.018op/s 0.72% 0.062 -0.397 0.26% 5.830op/s 1 200
trace_buffer/2_senders/1us_delay execution_time 50.057ms 50.118ms ± 0.039ms 50.108ms ± 0.021ms 50.134ms 50.201ms 50.227ms 50.242ms 0.27% 1.101 0.610 0.08% 0.003ms 1 200
trace_buffer/2_senders/1us_delay throughput 35826.718op/s 35915.230op/s ± 27.967op/s 35922.551op/s ± 15.339op/s 35935.878op/s 35945.829op/s 35954.839op/s 35958.660op/s 0.10% -1.098 0.602 0.08% 1.978op/s 1 200
trace_buffer/2_senders/no_delay execution_time 824.565µs 869.590µs ± 19.125µs 869.905µs ± 12.475µs 878.909µs 904.038µs 920.542µs 924.593µs 6.29% 0.303 0.106 2.19% 1.352µs 1 200
trace_buffer/2_senders/no_delay throughput 1946802.650op/s 2070931.371op/s ± 45310.141op/s 2069192.453op/s ± 29958.431op/s 2101132.787op/s 2145255.890op/s 2164644.449op/s 2182968.505op/s 5.50% -0.172 0.017 2.18% 3203.911op/s 1 200
trace_buffer/4_senders/10us_delay execution_time 57.418ms 57.641ms ± 0.133ms 57.623ms ± 0.064ms 57.698ms 57.907ms 58.101ms 58.178ms 0.96% 1.273 2.379 0.23% 0.009ms 1 200
trace_buffer/4_senders/10us_delay throughput 61878.701op/s 62455.828op/s ± 143.912op/s 62474.912op/s ± 68.981op/s 62538.957op/s 62659.139op/s 62691.166op/s 62697.707op/s 0.36% -1.254 2.317 0.23% 10.176op/s 1 200
trace_buffer/4_senders/1us_delay execution_time 50.092ms 50.170ms ± 0.040ms 50.160ms ± 0.016ms 50.186ms 50.259ms 50.312ms 50.364ms 0.41% 1.743 4.234 0.08% 0.003ms 1 200
trace_buffer/4_senders/1us_delay throughput 71480.158op/s 71756.263op/s ± 57.838op/s 71770.211op/s ± 23.446op/s 71791.216op/s 71822.693op/s 71838.427op/s 71867.759op/s 0.14% -1.736 4.198 0.08% 4.090op/s 1 200
trace_buffer/4_senders/no_delay execution_time 2.013ms 2.257ms ± 0.082ms 2.255ms ± 0.050ms 2.306ms 2.398ms 2.422ms 2.454ms 8.82% -0.146 -0.031 3.64% 0.006ms 1 200
trace_buffer/4_senders/no_delay throughput 1467182.639op/s 1596817.425op/s ± 58777.416op/s 1596583.416op/s ± 34628.353op/s 1626973.612op/s 1701867.136op/s 1747844.804op/s 1788411.985op/s 12.01% 0.364 0.181 3.67% 4156.191op/s 1 200
trace_buffer/8_senders/10us_delay execution_time 57.632ms 57.958ms ± 0.211ms 57.888ms ± 0.129ms 58.093ms 58.359ms 58.468ms 58.615ms 1.26% 0.846 -0.227 0.36% 0.015ms 1 200
trace_buffer/8_senders/10us_delay throughput 122835.018op/s 124228.920op/s ± 451.807op/s 124378.727op/s ± 277.243op/s 124580.536op/s 124724.600op/s 124851.159op/s 124929.786op/s 0.44% -0.834 -0.252 0.36% 31.948op/s 1 200
trace_buffer/8_senders/1us_delay execution_time 50.207ms 50.298ms ± 0.059ms 50.286ms ± 0.032ms 50.322ms 50.421ms 50.500ms 50.544ms 0.51% 1.474 2.655 0.12% 0.004ms 1 200
trace_buffer/8_senders/1us_delay throughput 142451.323op/s 143147.502op/s ± 166.354op/s 143182.255op/s ± 90.178op/s 143266.373op/s 143330.408op/s 143363.999op/s 143406.789op/s 0.16% -1.465 2.618 0.12% 11.763op/s 1 200
trace_buffer/8_senders/no_delay execution_time 6.095ms 6.569ms ± 0.091ms 6.578ms ± 0.049ms 6.623ms 6.698ms 6.755ms 6.813ms 3.57% -0.906 3.463 1.38% 0.006ms 1 200
trace_buffer/8_senders/no_delay throughput 1056830.368op/s 1096201.225op/s ± 15378.114op/s 1094508.088op/s ± 8286.548op/s 1103650.528op/s 1123069.648op/s 1142336.757op/s 1181337.299op/s 7.93% 1.111 4.422 1.40% 1087.397op/s 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
trace_buffer/1_senders/10us_delay execution_time [56.621ms; 56.664ms] or [-0.038%; +0.038%] None None None
trace_buffer/1_senders/10us_delay throughput [15883.144op/s; 15895.218op/s] or [-0.038%; +0.038%] None None None
trace_buffer/1_senders/1us_delay execution_time [50.077ms; 50.085ms] or [-0.009%; +0.009%] None None None
trace_buffer/1_senders/1us_delay throughput [17969.314op/s; 17972.431op/s] or [-0.009%; +0.009%] None None None
trace_buffer/1_senders/no_delay execution_time [339.292µs; 340.639µs] or [-0.198%; +0.198%] None None None
trace_buffer/1_senders/no_delay throughput [2642934.403op/s; 2652723.191op/s] or [-0.185%; +0.185%] None None None
trace_buffer/2_senders/10us_delay execution_time [57.354ms; 57.396ms] or [-0.036%; +0.036%] None None None
trace_buffer/2_senders/10us_delay throughput [31361.186op/s; 31384.038op/s] or [-0.036%; +0.036%] None None None
trace_buffer/2_senders/1us_delay execution_time [50.113ms; 50.123ms] or [-0.011%; +0.011%] None None None
trace_buffer/2_senders/1us_delay throughput [35911.354op/s; 35919.106op/s] or [-0.011%; +0.011%] None None None
trace_buffer/2_senders/no_delay execution_time [866.940µs; 872.241µs] or [-0.305%; +0.305%] None None None
trace_buffer/2_senders/no_delay throughput [2064651.821op/s; 2077210.920op/s] or [-0.303%; +0.303%] None None None
trace_buffer/4_senders/10us_delay execution_time [57.623ms; 57.660ms] or [-0.032%; +0.032%] None None None
trace_buffer/4_senders/10us_delay throughput [62435.883op/s; 62475.773op/s] or [-0.032%; +0.032%] None None None
trace_buffer/4_senders/1us_delay execution_time [50.164ms; 50.175ms] or [-0.011%; +0.011%] None None None
trace_buffer/4_senders/1us_delay throughput [71748.247op/s; 71764.279op/s] or [-0.011%; +0.011%] None None None
trace_buffer/4_senders/no_delay execution_time [2.246ms; 2.269ms] or [-0.505%; +0.505%] None None None
trace_buffer/4_senders/no_delay throughput [1588671.440op/s; 1604963.409op/s] or [-0.510%; +0.510%] None None None
trace_buffer/8_senders/10us_delay execution_time [57.929ms; 57.988ms] or [-0.051%; +0.051%] None None None
trace_buffer/8_senders/10us_delay throughput [124166.304op/s; 124291.536op/s] or [-0.050%; +0.050%] None None None
trace_buffer/8_senders/1us_delay execution_time [50.290ms; 50.306ms] or [-0.016%; +0.016%] None None None
trace_buffer/8_senders/1us_delay throughput [143124.447op/s; 143170.557op/s] or [-0.016%; +0.016%] None None None
trace_buffer/8_senders/no_delay execution_time [6.557ms; 6.582ms] or [-0.192%; +0.192%] None None None
trace_buffer/8_senders/no_delay throughput [1094069.966op/s; 1098332.483op/s] or [-0.194%; +0.194%] None None None

Baseline

Baseline benchmark details

Group 1

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 3e3454a 1786644285 main
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
trace_buffer/1_senders/10us_delay execution_time 56.345ms 56.576ms ± 0.203ms 56.531ms ± 0.077ms 56.613ms 56.924ms 57.509ms 57.574ms 1.84% 2.576 8.581 0.36% 0.014ms 1 200
trace_buffer/1_senders/10us_delay throughput 15632.024op/s 15908.019op/s ± 56.534op/s 15920.408op/s ± 21.677op/s 15940.918op/s 15960.198op/s 15972.358op/s 15973.076op/s 0.33% -2.535 8.326 0.35% 3.998op/s 1 200
trace_buffer/1_senders/1us_delay execution_time 50.023ms 50.076ms ± 0.036ms 50.078ms ± 0.013ms 50.086ms 50.140ms 50.198ms 50.306ms 0.46% 1.994 8.871 0.07% 0.003ms 1 200
trace_buffer/1_senders/1us_delay throughput 17890.383op/s 17972.593op/s ± 12.901op/s 17972.037op/s ± 4.556op/s 17979.551op/s 17989.674op/s 17990.588op/s 17991.615op/s 0.11% -1.979 8.766 0.07% 0.912op/s 1 200
trace_buffer/1_senders/no_delay execution_time 330.284µs 339.222µs ± 5.324µs 338.465µs ± 1.634µs 340.667µs 344.021µs 348.548µs 398.215µs 17.65% 7.050 74.106 1.57% 0.376µs 1 200
trace_buffer/1_senders/no_delay throughput 2260088.106op/s 2653721.278op/s ± 37821.185op/s 2659066.334op/s ± 12834.961op/s 2671271.072op/s 2692714.004op/s 2707471.294op/s 2724928.907op/s 2.48% -5.904 57.510 1.42% 2674.362op/s 1 200
trace_buffer/2_senders/10us_delay execution_time 56.772ms 57.144ms ± 0.161ms 57.145ms ± 0.117ms 57.260ms 57.421ms 57.500ms 57.551ms 0.71% 0.119 -0.493 0.28% 0.011ms 1 200
trace_buffer/2_senders/10us_delay throughput 31276.579op/s 31499.410op/s ± 88.984op/s 31498.578op/s ± 64.875op/s 31563.335op/s 31641.603op/s 31676.933op/s 31706.025op/s 0.66% -0.106 -0.497 0.28% 6.292op/s 1 200
trace_buffer/2_senders/1us_delay execution_time 50.043ms 50.111ms ± 0.032ms 50.106ms ± 0.016ms 50.122ms 50.181ms 50.222ms 50.225ms 0.24% 1.265 2.026 0.06% 0.002ms 1 200
trace_buffer/2_senders/1us_delay throughput 35838.798op/s 35919.948op/s ± 22.890op/s 35923.859op/s ± 11.705op/s 35935.522op/s 35947.994op/s 35956.727op/s 35969.220op/s 0.13% -1.260 2.013 0.06% 1.619op/s 1 200
trace_buffer/2_senders/no_delay execution_time 831.074µs 879.497µs ± 18.940µs 879.636µs ± 13.007µs 893.070µs 908.902µs 924.801µs 965.004µs 9.70% 0.272 1.396 2.15% 1.339µs 1 200
trace_buffer/2_senders/no_delay throughput 1865276.632op/s 2047564.341op/s ± 43933.360op/s 2046301.776op/s ± 30317.892op/s 2075607.221op/s 2123739.333op/s 2152106.147op/s 2165872.524op/s 5.84% -0.072 0.930 2.14% 3106.558op/s 1 200
trace_buffer/4_senders/10us_delay execution_time 57.289ms 57.541ms ± 0.106ms 57.533ms ± 0.057ms 57.600ms 57.712ms 57.875ms 57.939ms 0.71% 0.855 1.726 0.18% 0.008ms 1 200
trace_buffer/4_senders/10us_delay throughput 62134.289op/s 62564.471op/s ± 115.301op/s 62573.160op/s ± 61.535op/s 62629.620op/s 62737.144op/s 62769.102op/s 62838.940op/s 0.42% -0.839 1.685 0.18% 8.153op/s 1 200
trace_buffer/4_senders/1us_delay execution_time 50.104ms 50.169ms ± 0.037ms 50.159ms ± 0.017ms 50.181ms 50.251ms 50.285ms 50.326ms 0.33% 1.480 2.377 0.07% 0.003ms 1 200
trace_buffer/4_senders/1us_delay throughput 71534.260op/s 71756.982op/s ± 53.537op/s 71772.176op/s ± 24.684op/s 71792.595op/s 71814.397op/s 71835.559op/s 71851.071op/s 0.11% -1.475 2.357 0.07% 3.786op/s 1 200
trace_buffer/4_senders/no_delay execution_time 2.176ms 2.432ms ± 0.082ms 2.436ms ± 0.059ms 2.493ms 2.560ms 2.585ms 2.615ms 7.37% -0.365 -0.189 3.37% 0.006ms 1 200
trace_buffer/4_senders/no_delay throughput 1376638.032op/s 1482214.974op/s ± 50917.181op/s 1478133.252op/s ± 35272.888op/s 1517193.262op/s 1571885.821op/s 1611111.672op/s 1654555.664op/s 11.94% 0.541 0.073 3.43% 3600.388op/s 1 200
trace_buffer/8_senders/10us_delay execution_time 57.634ms 57.970ms ± 0.231ms 57.875ms ± 0.110ms 58.114ms 58.475ms 58.531ms 58.581ms 1.22% 0.997 -0.079 0.40% 0.016ms 1 200
trace_buffer/8_senders/10us_delay throughput 122906.382op/s 124204.140op/s ± 493.902op/s 124405.551op/s ± 236.509op/s 124557.660op/s 124718.933op/s 124818.467op/s 124927.004op/s 0.42% -0.986 -0.103 0.40% 34.924op/s 1 200
trace_buffer/8_senders/1us_delay execution_time 50.207ms 50.292ms ± 0.057ms 50.273ms ± 0.028ms 50.321ms 50.387ms 50.497ms 50.502ms 0.46% 1.279 1.934 0.11% 0.004ms 1 200
trace_buffer/8_senders/1us_delay throughput 142568.405op/s 143164.902op/s ± 160.798op/s 143217.936op/s ± 81.176op/s 143269.963op/s 143350.022op/s 143397.209op/s 143406.872op/s 0.13% -1.271 1.905 0.11% 11.370op/s 1 200
trace_buffer/8_senders/no_delay execution_time 6.568ms 6.784ms ± 0.067ms 6.790ms ± 0.037ms 6.827ms 6.885ms 6.906ms 6.916ms 1.86% -0.633 0.368 0.98% 0.005ms 1 200
trace_buffer/8_senders/no_delay throughput 1041102.335op/s 1061449.651op/s ± 10500.560op/s 1060420.320op/s ± 5812.597op/s 1066311.053op/s 1082547.772op/s 1091106.101op/s 1096286.431op/s 3.38% 0.691 0.469 0.99% 742.502op/s 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
trace_buffer/1_senders/10us_delay execution_time [56.548ms; 56.604ms] or [-0.050%; +0.050%] None None None
trace_buffer/1_senders/10us_delay throughput [15900.184op/s; 15915.854op/s] or [-0.049%; +0.049%] None None None
trace_buffer/1_senders/1us_delay execution_time [50.071ms; 50.081ms] or [-0.010%; +0.010%] None None None
trace_buffer/1_senders/1us_delay throughput [17970.805op/s; 17974.381op/s] or [-0.010%; +0.010%] None None None
trace_buffer/1_senders/no_delay execution_time [338.484µs; 339.959µs] or [-0.217%; +0.217%] None None None
trace_buffer/1_senders/no_delay throughput [2648479.625op/s; 2658962.931op/s] or [-0.198%; +0.198%] None None None
trace_buffer/2_senders/10us_delay execution_time [57.122ms; 57.167ms] or [-0.039%; +0.039%] None None None
trace_buffer/2_senders/10us_delay throughput [31487.078op/s; 31511.742op/s] or [-0.039%; +0.039%] None None None
trace_buffer/2_senders/1us_delay execution_time [50.107ms; 50.116ms] or [-0.009%; +0.009%] None None None
trace_buffer/2_senders/1us_delay throughput [35916.775op/s; 35923.120op/s] or [-0.009%; +0.009%] None None None
trace_buffer/2_senders/no_delay execution_time [876.872µs; 882.122µs] or [-0.298%; +0.298%] None None None
trace_buffer/2_senders/no_delay throughput [2041475.600op/s; 2053653.082op/s] or [-0.297%; +0.297%] None None None
trace_buffer/4_senders/10us_delay execution_time [57.526ms; 57.556ms] or [-0.026%; +0.026%] None None None
trace_buffer/4_senders/10us_delay throughput [62548.491op/s; 62580.450op/s] or [-0.026%; +0.026%] None None None
trace_buffer/4_senders/1us_delay execution_time [50.164ms; 50.175ms] or [-0.010%; +0.010%] None None None
trace_buffer/4_senders/1us_delay throughput [71749.562op/s; 71764.402op/s] or [-0.010%; +0.010%] None None None
trace_buffer/4_senders/no_delay execution_time [2.420ms; 2.443ms] or [-0.469%; +0.469%] None None None
trace_buffer/4_senders/no_delay throughput [1475158.342op/s; 1489271.605op/s] or [-0.476%; +0.476%] None None None
trace_buffer/8_senders/10us_delay execution_time [57.938ms; 58.002ms] or [-0.055%; +0.055%] None None None
trace_buffer/8_senders/10us_delay throughput [124135.690op/s; 124272.590op/s] or [-0.055%; +0.055%] None None None
trace_buffer/8_senders/1us_delay execution_time [50.284ms; 50.300ms] or [-0.016%; +0.016%] None None None
trace_buffer/8_senders/1us_delay throughput [143142.617op/s; 143187.187op/s] or [-0.016%; +0.016%] None None None
trace_buffer/8_senders/no_delay execution_time [6.775ms; 6.793ms] or [-0.136%; +0.136%] None None None
trace_buffer/8_senders/no_delay throughput [1059994.375op/s; 1062904.928op/s] or [-0.137%; +0.137%] None None None

@bengl
bengl marked this pull request as ready for review July 16, 2026 15:44
@bengl
bengl requested review from a team as code owners July 16, 2026 15:44
@bengl
bengl requested review from vpellan and removed request for a team July 16, 2026 15:44
}) && attrs.iter().any(|attr| {
attr.get("key").and_then(Value::as_str) == Some("_dd.stats_computed")
&& attr.pointer("/value/stringValue").and_then(Value::as_str)
== Some("true")

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Out of curiosity, why can't the new test be implemented in term of json_body_includes? I'm not sure how it works exactly, but naively it looks like the previous payload could be extended for _dd.stats_computed

@bengl
bengl force-pushed the bengl/otlp-client-computed-stats branch from a5515d2 to 1281505 Compare July 16, 2026 15:58
@dd-octo-sts

dd-octo-sts Bot commented Jul 16, 2026 •

Copy link
Copy Markdown
Contributor

Artifact Size Benchmark Report

aarch64-alpine-linux-musl
Artifact Baseline Commit Change
/aarch64-alpine-linux-musl/lib/libdatadog_profiling.a 89.46 MB 89.46 MB -0% (-16 B) 👌
/aarch64-alpine-linux-musl/lib/libdatadog_profiling.so 8.20 MB 8.20 MB 0% (0 B) 👌
aarch64-unknown-linux-gnu
Artifact Baseline Commit Change
/aarch64-unknown-linux-gnu/lib/libdatadog_profiling.a 100.64 MB 100.64 MB -0% (-24 B) 👌
/aarch64-unknown-linux-gnu/lib/libdatadog_profiling.so 11.06 MB 11.06 MB 0% (0 B) 👌
libdatadog-x64-windows
Artifact Baseline Commit Change
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.dll 26.62 MB 26.62 MB 0% (0 B) 👌
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.lib 94.56 KB 94.56 KB 0% (0 B) 👌
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.pdb 180.61 MB 180.62 MB +0% (+8.00 KB) 👌
/libdatadog-x64-windows/debug/static/datadog_profiling_ffi.lib 770.97 MB 771.59 MB +.07% (+628.73 KB) 🔍
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.dll 8.72 MB 8.72 MB 0% (0 B) 👌
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.lib 94.56 KB 94.56 KB 0% (0 B) 👌
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.pdb 25.64 MB 25.64 MB 0% (0 B) 👌
/libdatadog-x64-windows/release/static/datadog_profiling_ffi.lib 51.06 MB 51.06 MB +0% (+88 B) 👌
libdatadog-x86-windows
Artifact Baseline Commit Change
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.dll 23.20 MB 23.20 MB 0% (0 B) 👌
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.lib 96.04 KB 96.04 KB 0% (0 B) 👌
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.pdb 185.59 MB 185.59 MB 0% (0 B) 👌
/libdatadog-x86-windows/debug/static/datadog_profiling_ffi.lib 759.16 MB 759.88 MB +.09% (+730.21 KB) 🔍
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.dll 6.74 MB 6.74 MB 0% (0 B) 👌
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.lib 96.04 KB 96.04 KB 0% (0 B) 👌
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.pdb 27.58 MB 27.58 MB 0% (0 B) 👌
/libdatadog-x86-windows/release/static/datadog_profiling_ffi.lib 48.61 MB 48.61 MB +0% (+104 B) 👌
x86_64-alpine-linux-musl
Artifact Baseline Commit Change
/x86_64-alpine-linux-musl/lib/libdatadog_profiling.a 79.72 MB 79.72 MB +0% (+88 B) 👌
/x86_64-alpine-linux-musl/lib/libdatadog_profiling.so 9.15 MB 9.15 MB 0% (0 B) 👌
x86_64-unknown-linux-gnu
Artifact Baseline Commit Change
/x86_64-unknown-linux-gnu/lib/libdatadog_profiling.a 95.38 MB 95.38 MB +0% (+24 B) 👌
/x86_64-unknown-linux-gnu/lib/libdatadog_profiling.so 11.16 MB 11.16 MB 0% (0 B) 👌

@bengl
bengl force-pushed the bengl/otlp-client-computed-stats branch from 1281505 to 6356aee Compare July 16, 2026 16:37
@bm1549
bm1549 removed the request for review from vpellan July 29, 2026 13:39
When tracers compute span metrics outside libdatadog, OTLP trace
exports still need to mark the resource and direct Agent request so the
Agent does not compute the same stats again. Use the tracer metadata flag
in addition to libdatadog's native OTLP stats worker state.
@yannham
yannham force-pushed the bengl/otlp-client-computed-stats branch from 6356aee to f1d5c6f Compare August 14, 2026 08:35
@yannham

yannham commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

Rebasing and merging in the absence of @bengl , this is blocking for a libdatadog-nodejs release.

@yannham

yannham commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

/merge

@gh-worker-devflow-routing-ef8351

gh-worker-devflow-routing-ef8351 Bot commented Aug 14, 2026 •

Copy link
Copy Markdown

View all feedbacks in Devflow UI.

2026-08-14 10:23:24 UTC ℹ️ Start processing command /merge


2026-08-14 10:23:29 UTC ℹ️ MergeQueue: pull request added to the queue

The expected merge time in main is approximately 60m (p90).


2026-08-14 11:10:24 UTC ℹ️ MergeQueue: This merge request was merged

@gh-worker-dd-mergequeue-cf854d
gh-worker-dd-mergequeue-cf854d Bot merged commit 1b9b7a2 into main Aug 14, 2026
175 checks passed
@gh-worker-dd-mergequeue-cf854d
gh-worker-dd-mergequeue-cf854d Bot deleted the bengl/otlp-client-computed-stats branch August 14, 2026 11:10
hoolioh added a commit that referenced this pull request Aug 18, 2026
)

# Release proposal for libdd-data-pipeline, libdd-telemetry and their
dependencies

This PR contains version bumps based on public API changes and commits
since last release.

## libdd-ddsketch
**Next version:** `1.1.1`
**Semver bump:** `patch`
**Tag:** `libdd-ddsketch-v1.1.1`

### Commits

- refactor: migrate to workspace dependencies, phase 4 (#2296)
- chore: moving to workspace-level dependencies, phase 2 (#2270)

## libdd-shared-runtime
**Next version:** `3.0.0`
**Semver bump:** `major`
**Tag:** `libdd-shared-runtime-v3.0.0`

### ⚠️ major bump forced due to:

- `libdd-capabilities`: ^2.1.0 → ^3.0.0
- `libdd-capabilities-impl`: ^3.0.0 → ^4.0.0

### Commits

- feat(shared-runtime): add block_on_with_timeout to BlockingRuntime
(#2333)
- chore(runtime): restart all workers on invalid state (#2262)
- refactor: migrate to workspace dependencies, phase 3 (#2283)
- refactor: consolidate core dependencies at workspace level (phase 1)
(#2253)

## libdd-dogstatsd-client
**Next version:** `5.0.0`
**Semver bump:** `major`
**Tag:** `libdd-dogstatsd-client-v5.0.0`

### Commits

- refactor: consolidate core dependencies at workspace level (phase 1)
(#2253)
- feat(dogstatsd)!: add shared_runtime buffered sink (#2224)
- refactor(statsd)!: make client clonable (#2222)

## libdd-telemetry
**Next version:** `7.0.0`
**Semver bump:** `major`
**Tag:** `libdd-telemetry-v7.0.0`

### Commits

- refactor(rc)!: make conversion from RemoteConfigProduct back and forth
generally available (#2325)
- feat(telemetry)!: Add Installation signature and AppProduct changes
payloads (#2213)
- fix(telemetry)!: stop sending Connection: close to the Agent (#2286)
- refactor: migrate to workspace dependencies, phase 3 (#2283)
- chore: moving to workspace-level dependencies, phase 2 (#2270)
- refactor: consolidate core dependencies at workspace level (phase 1)
(#2253)
- fix: drain the mailbox before stopping (#2258)
- feat(telemetry)!: make telemetry worker wasm-compatible for the
TraceExporter (#2172)
- fix(sidecar): don't double-encode file:// telemetry endpoints (#2230)

## libdd-trace-obfuscation
**Next version:** `6.0.0`
**Semver bump:** `major`
**Tag:** `libdd-trace-obfuscation-v6.0.0`

### ⚠️ major bump forced due to:

- `libdd-trace-utils`: ^9.0.0 → ^10.1.0

### Commits

- refactor: migrate to workspace dependencies, phase 4 (#2296)
- chore(lint): update nightly (#2281)
- chore: moving to workspace-level dependencies, phase 2 (#2270)
- refactor: consolidate core dependencies at workspace level (phase 1)
(#2253)
- fix: new clippy lints (#2219)

## libdd-trace-stats
**Next version:** `7.0.0`
**Semver bump:** `major`
**Tag:** `libdd-trace-stats-v7.0.0`

### ⚠️ major bump forced due to:

- `libdd-capabilities`: ^2.1.0 → ^3.0.0
- `libdd-capabilities-impl`: ^3.0.0 → ^4.0.0
- `libdd-dogstatsd-client`: ^4.0.0 → ^5.0.0
- `libdd-telemetry`: ^6.0.0 → ^7.0.0
- `libdd-trace-utils`: ^9.0.0 → ^10.1.0

### Commits

- feat: add v1 isolated bricks for trace exporter (#2280)
- refactor: migrate to workspace dependencies, phase 4 (#2296)
- feat(data-pipeline)!: add compression option for agentless export
(#2205)
- feat(stats)!: per-field cardinality limits (#2211)
- refactor: migrate to workspace dependencies, phase 3 (#2283)
- feat(stats)!: string field length limit (#2267)
- feat(trace_exporter)!: add `restart_after_fork` configuration option
[APMSP-3843] (#2263)
- refactor: consolidate core dependencies at workspace level (phase 1)
(#2253)
- feat(stats)!: implement additional metric tags in libdd-trace-stats
(#2170)
- refactor(statsd)!: make client clonable (#2222)
- fix(stats-exporter): disable retries for stats payload sends (#2249)
- feat(telemetry)!: make telemetry worker wasm-compatible for the
TraceExporter (#2172)
- fix!: css obfuscation logic (#2203)

## libdd-data-pipeline
**Next version:** `8.0.0`
**Semver bump:** `major`
**Tag:** `libdd-data-pipeline-v8.0.0`

### ⚠️ major bump forced due to:

- `libdd-capabilities`: ^2.1.0 → ^3.0.0
- `libdd-capabilities-impl`: ^3.0.0 → ^4.0.0
- `libdd-dogstatsd-client`: ^4.0.0 → ^5.0.0
- `libdd-telemetry`: ^6.0.0 → ^7.0.0
- `libdd-trace-stats`: ^6.0.0 → ^7.0.0
- `libdd-trace-utils`: ^9.0.0 → ^10.1.0

### Commits

- fix(trace-exporter): mark OTLP client-computed stats (#2245)
- feat(data-pipeline): adds new attributes to OTLP trace metrics export
(#2316)
- feat: add v1 isolated bricks for trace exporter (#2280)
- feat(data-pipeline)!: add flush_and_close to the trace buffer (#2313)
- feat(telemetry)!: Add Installation signature and AppProduct changes
payloads (#2213)
- refactor: migrate to workspace dependencies, phase 4 (#2296)
- feat(data-pipeline)!: add compression option for agentless export
(#2205)
- fix(telemetry)!: stop sending Connection: close to the Agent (#2286)
- feat(stats)!: per-field cardinality limits (#2211)
- refactor: migrate to workspace dependencies, phase 3 (#2283)
- feat(stats)!: string field length limit (#2267)
- refactor(trace-utils)!: split generic TracerHeaderTags (#2279)
- chore: moving to workspace-level dependencies, phase 2 (#2270)
- feat(trace_exporter)!: add `restart_after_fork` configuration option
[APMSP-3843] (#2263)
- feat(data-pipeline): emit additional_metric_tags on OTLP span duration
metric (#2264)
- refactor: consolidate core dependencies at workspace level (phase 1)
(#2253)
- feat(dogstatsd)!: add shared_runtime buffered sink (#2224)
- feat(stats)!: implement additional metric tags in libdd-trace-stats
(#2170)
- refactor(statsd)!: make client clonable (#2222)
- feat(telemetry)!: make telemetry worker wasm-compatible for the
TraceExporter (#2172)
- feat(trace_exporter)!: remove deprecated methods (#2250)
- feat(trace-utils)!: add v1 decoder (#2174)
- feat(trace-utils)!: add encoder v1 to v04 + refactor (#2145)
- feat(otlp): add instrumentation scope metadata (#2235)
- fix(trace-utils)!: serialize v0.5 span links and events into meta
(#980)
- fix!: css obfuscation logic (#2203)
- test(data-pipeline): gate telemetry-only tests behind the telemetry
feature (#2204)


[APMSP-3843]:
https://datadoghq.atlassian.net/browse/APMSP-3843?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: hoolioh <107922352+hoolioh@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants