Skip to content

WIP: OTLP trace export#1641

Open
rachelyangdog wants to merge 6 commits intomainfrom
rachel.yang/OTLP-trace-export
Open

WIP: OTLP trace export#1641
rachelyangdog wants to merge 6 commits intomainfrom
rachel.yang/OTLP-trace-export

Conversation

@rachelyangdog
Copy link

@rachelyangdog rachelyangdog commented Mar 2, 2026

What does this PR do?

Summary

This PR adds an OTLP HTTP/JSON trace export path to TraceExporter. When OTEL_TRACES_EXPORTER=otlp is set, the exporter converts Datadog msgpack trace payloads to OTLP and POSTs them to the configured OTLP endpoint instead of the Datadog agent. The caller (e.g. dd-trace-py) sends traces in the same format as before — no changes are required on the tracer side.

Not in scope

  • http/protobuf and grpc protocols (they are parsed from env but not yet implemented; http/json is the default and only supported format). This is currently a POC so we will add additional support later.

Motivation

We are seeing an increasing number of scenarios where users have applications instrumented with the OTel SDK sending data to OTel collectors, and they would like to get additional features offered by the DD SDK without needing to update their OTel collector deployments. Although there will be follow-up work, this provides the ability for users to write vendor-neutral API instrumentation and emit vendor-neutral telemetry data so DD SDK users don't have to feel locked in when setting up Datadog APM.

Additional Notes

Anything else we should know when reviewing?

How to test the change?

Describe here in detail how the change can be validated.

@rachelyangdog rachelyangdog requested a review from a team as a code owner March 2, 2026 21:42
@rachelyangdog rachelyangdog marked this pull request as draft March 2, 2026 21:42
@github-actions
Copy link

github-actions bot commented Mar 2, 2026

📚 Documentation Check Results

⚠️ 863 documentation warning(s) found

📦 libdd-data-pipeline - 863 warning(s)


Updated: 2026-03-06 19:49:51 UTC | Commit: 4462c76 | missing-docs job results

@github-actions
Copy link

github-actions bot commented Mar 2, 2026

Clippy Allow Annotation Report

Comparing clippy allow annotations between branches:

  • Base Branch: origin/main
  • PR Branch: origin/rachel.yang/OTLP-trace-export

Summary by Rule

Rule Base Branch PR Branch Change
unwrap_used 2 2 No change (0%)
Total 2 2 No change (0%)

Annotation Counts by File

File Base Branch PR Branch Change
libdd-data-pipeline/src/trace_exporter/mod.rs 2 2 No change (0%)

Annotation Stats by Crate

Crate Base Branch PR Branch Change
clippy-annotation-reporter 5 5 No change (0%)
datadog-ffe-ffi 1 1 No change (0%)
datadog-ipc 28 27 ✅ -1 (-3.6%)
datadog-live-debugger 6 6 No change (0%)
datadog-live-debugger-ffi 10 10 No change (0%)
datadog-profiling-replayer 4 4 No change (0%)
datadog-remote-config 3 3 No change (0%)
datadog-sidecar 59 59 No change (0%)
libdd-common 10 10 No change (0%)
libdd-common-ffi 12 12 No change (0%)
libdd-crashtracker 12 12 No change (0%)
libdd-data-pipeline 5 5 No change (0%)
libdd-ddsketch 2 2 No change (0%)
libdd-dogstatsd-client 1 1 No change (0%)
libdd-profiling 13 13 No change (0%)
libdd-telemetry 19 19 No change (0%)
libdd-tinybytes 4 4 No change (0%)
libdd-trace-normalization 2 2 No change (0%)
libdd-trace-obfuscation 9 9 No change (0%)
libdd-trace-utils 15 15 No change (0%)
Total 220 219 ✅ -1 (-0.5%)

About This Report

This report tracks Clippy allow annotations for specific rules, showing how they've changed in this PR. Decreasing the number of these annotations generally improves code quality.

@github-actions
Copy link

github-actions bot commented Mar 2, 2026

🔒 Cargo Deny Results

⚠️ 1 issue(s) found, showing only errors (advisories, bans, sources)

📦 libdd-data-pipeline - 1 error(s)

Show output
error[vulnerability]: Denial of Service via Stack Exhaustion
    ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:291:1
    │
291 │ time 0.3.41 registry+https://github.com/rust-lang/crates.io-index
    │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ security vulnerability detected
    │
    ├ ID: RUSTSEC-2026-0009
    ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2026-0009
    ├ ## Impact
      
      When user-provided input is provided to any type that parses with the RFC 2822 format, a denial of
      service attack via stack exhaustion is possible. The attack relies on formally deprecated and
      rarely-used features that are part of the RFC 2822 format used in a malicious manner. Ordinary,
      non-malicious input will never encounter this scenario.
      
      ## Patches
      
      A limit to the depth of recursion was added in v0.3.47. From this version, an error will be returned
      rather than exhausting the stack.
      
      ## Workarounds
      
      Limiting the length of user input is the simplest way to avoid stack exhaustion, as the amount of
      the stack consumed would be at most a factor of the length of the input.
    ├ Announcement: https://github.com/time-rs/time/blob/main/CHANGELOG.md#0347-2026-02-05
    ├ Solution: Upgrade to >=0.3.47 (try `cargo update -p time`)
    ├ time v0.3.41
      └── tracing-appender v0.2.3
          └── libdd-log v1.0.0
              └── (dev) libdd-data-pipeline v2.0.0

advisories FAILED, bans ok, sources ok

Updated: 2026-03-06 19:52:56 UTC | Commit: 4462c76 | dependency-check job results

@pr-commenter
Copy link

pr-commenter bot commented Mar 2, 2026

Benchmarks

Comparison

Benchmark execution time: 2026-03-06 20:05:47

Comparing candidate commit 42de22c in PR branch rachel.yang/OTLP-trace-export with baseline commit bd94dd9 in branch main.

Found 0 performance improvements and 1 performance regressions! Performance is the same for 56 metrics, 2 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:sql/obfuscate_sql_string

  • 🟥 execution_time [+5.417µs; +5.480µs] or [+6.299%; +6.372%]

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 42de22c 1772826505 rachel.yang/OTLP-trace-export
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
sdk_test_data/rules-based execution_time 146.327µs 148.189µs ± 1.550µs 147.975µs ± 0.569µs 148.544µs 149.557µs 153.887µs 162.706µs 9.95% 5.579 43.914 1.04% 0.110µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
sdk_test_data/rules-based execution_time [147.974µs; 148.403µs] or [-0.145%; +0.145%] None None None

Group 2

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 42de22c 1772826505 rachel.yang/OTLP-trace-export
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
normalization/normalize_trace/test_trace execution_time 241.684ns 250.077ns ± 10.991ns 245.173ns ± 2.099ns 249.902ns 276.073ns 280.808ns 283.197ns 15.51% 1.765 1.641 4.38% 0.777ns 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
normalization/normalize_trace/test_trace execution_time [248.554ns; 251.600ns] or [-0.609%; +0.609%] None None None

Group 3

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 42de22c 1772826505 rachel.yang/OTLP-trace-export
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
credit_card/is_card_number/ execution_time 3.895µs 3.912µs ± 0.003µs 3.911µs ± 0.002µs 3.913µs 3.916µs 3.917µs 3.919µs 0.20% -0.734 5.326 0.07% 0.000µs 1 200
credit_card/is_card_number/ throughput 255137498.357op/s 255646756.582op/s ± 177128.587op/s 255656870.686op/s ± 108541.318op/s 255760967.021op/s 255884578.503op/s 255953538.641op/s 256710334.865op/s 0.41% 0.748 5.410 0.07% 12524.882op/s 1 200
credit_card/is_card_number/ 3782-8224-6310-005 execution_time 78.980µs 79.616µs ± 0.387µs 79.550µs ± 0.252µs 79.842µs 80.357µs 80.701µs 80.819µs 1.59% 0.738 0.224 0.48% 0.027µs 1 200
credit_card/is_card_number/ 3782-8224-6310-005 throughput 12373308.613op/s 12560550.444op/s ± 60840.201op/s 12570634.374op/s ± 39808.305op/s 12606096.651op/s 12646522.319op/s 12656996.838op/s 12661390.016op/s 0.72% -0.714 0.172 0.48% 4302.052op/s 1 200
credit_card/is_card_number/ 378282246310005 execution_time 72.325µs 72.861µs ± 0.321µs 72.808µs ± 0.201µs 73.038µs 73.429µs 73.857µs 73.927µs 1.54% 0.842 0.646 0.44% 0.023µs 1 200
credit_card/is_card_number/ 378282246310005 throughput 13526942.435op/s 13724957.862op/s ± 60155.844op/s 13734796.800op/s ± 37965.503op/s 13768652.222op/s 13804470.179op/s 13815547.238op/s 13826476.320op/s 0.67% -0.816 0.580 0.44% 4253.661op/s 1 200
credit_card/is_card_number/37828224631 execution_time 3.895µs 3.914µs ± 0.003µs 3.913µs ± 0.002µs 3.916µs 3.919µs 3.920µs 3.921µs 0.19% -0.547 5.110 0.08% 0.000µs 1 200
credit_card/is_card_number/37828224631 throughput 255050473.540op/s 255522648.650op/s ± 207385.302op/s 255544528.645op/s ± 131921.988op/s 255665632.981op/s 255776467.507op/s 255839699.605op/s 256760024.142op/s 0.48% 0.564 5.209 0.08% 14664.355op/s 1 200
credit_card/is_card_number/378282246310005 execution_time 69.263µs 69.761µs ± 0.342µs 69.685µs ± 0.226µs 69.956µs 70.488µs 70.664µs 71.180µs 2.15% 1.040 1.069 0.49% 0.024µs 1 200
credit_card/is_card_number/378282246310005 throughput 14048868.208op/s 14334942.177op/s ± 69843.828op/s 14350345.652op/s ± 46557.332op/s 14389704.527op/s 14419563.384op/s 14434764.562op/s 14437686.694op/s 0.61% -1.012 0.966 0.49% 4938.704op/s 1 200
credit_card/is_card_number/37828224631000521389798 execution_time 52.157µs 52.242µs ± 0.039µs 52.244µs ± 0.025µs 52.265µs 52.300µs 52.351µs 52.418µs 0.33% 0.678 2.006 0.07% 0.003µs 1 200
credit_card/is_card_number/37828224631000521389798 throughput 19077558.323op/s 19141810.897op/s ± 14233.759op/s 19140891.969op/s ± 9118.365op/s 19151711.354op/s 19163417.326op/s 19167245.204op/s 19172736.369op/s 0.17% -0.670 1.978 0.07% 1006.479op/s 1 200
credit_card/is_card_number/x371413321323331 execution_time 6.028µs 6.038µs ± 0.010µs 6.035µs ± 0.003µs 6.038µs 6.060µs 6.074µs 6.111µs 1.26% 3.887 18.836 0.16% 0.001µs 1 200
credit_card/is_card_number/x371413321323331 throughput 163631221.865op/s 165629714.404op/s ± 271426.203op/s 165694362.943op/s ± 73005.768op/s 165756552.921op/s 165825088.493op/s 165850982.302op/s 165883943.546op/s 0.11% -3.860 18.531 0.16% 19192.731op/s 1 200
credit_card/is_card_number_no_luhn/ execution_time 3.895µs 3.912µs ± 0.003µs 3.912µs ± 0.002µs 3.913µs 3.916µs 3.919µs 3.920µs 0.22% -0.776 7.081 0.07% 0.000µs 1 200
credit_card/is_card_number_no_luhn/ throughput 255074404.515op/s 255616591.485op/s ± 173497.041op/s 255624692.965op/s ± 99663.699op/s 255732190.290op/s 255837237.491op/s 255887293.149op/s 256712705.954op/s 0.43% 0.793 7.185 0.07% 12268.093op/s 1 200
credit_card/is_card_number_no_luhn/ 3782-8224-6310-005 execution_time 64.190µs 64.445µs ± 0.139µs 64.424µs ± 0.084µs 64.528µs 64.697µs 64.857µs 65.019µs 0.92% 0.963 1.441 0.22% 0.010µs 1 200
credit_card/is_card_number_no_luhn/ 3782-8224-6310-005 throughput 15380183.344op/s 15517169.387op/s ± 33482.067op/s 15522091.522op/s ± 20382.673op/s 15540363.854op/s 15562602.521op/s 15575391.692op/s 15578861.043op/s 0.37% -0.947 1.389 0.22% 2367.540op/s 1 200
credit_card/is_card_number_no_luhn/ 378282246310005 execution_time 58.105µs 58.411µs ± 0.165µs 58.380µs ± 0.099µs 58.510µs 58.737µs 58.889µs 59.128µs 1.28% 0.999 1.557 0.28% 0.012µs 1 200
credit_card/is_card_number_no_luhn/ 378282246310005 throughput 16912354.672op/s 17120201.992op/s ± 48364.298op/s 17129028.441op/s ± 29057.049op/s 17151907.847op/s 17185214.789op/s 17194379.646op/s 17210317.585op/s 0.47% -0.977 1.482 0.28% 3419.872op/s 1 200
credit_card/is_card_number_no_luhn/37828224631 execution_time 3.891µs 3.913µs ± 0.003µs 3.913µs ± 0.002µs 3.915µs 3.916µs 3.918µs 3.920µs 0.17% -2.082 14.305 0.08% 0.000µs 1 200
credit_card/is_card_number_no_luhn/37828224631 throughput 255112628.684op/s 255571497.306op/s ± 192474.007op/s 255540287.337op/s ± 133481.577op/s 255699910.517op/s 255835914.120op/s 255890459.783op/s 257024240.291op/s 0.58% 2.109 14.556 0.08% 13609.968op/s 1 200
credit_card/is_card_number_no_luhn/378282246310005 execution_time 54.594µs 54.941µs ± 0.281µs 54.871µs ± 0.179µs 55.107µs 55.434µs 55.862µs 55.926µs 1.92% 1.187 1.383 0.51% 0.020µs 1 200
credit_card/is_card_number_no_luhn/378282246310005 throughput 17880821.685op/s 18201781.795op/s ± 92421.290op/s 18224539.500op/s ± 59639.200op/s 18277215.635op/s 18304681.611op/s 18313376.297op/s 18316926.672op/s 0.51% -1.158 1.274 0.51% 6535.172op/s 1 200
credit_card/is_card_number_no_luhn/37828224631000521389798 execution_time 52.147µs 52.215µs ± 0.035µs 52.210µs ± 0.021µs 52.232µs 52.276µs 52.312µs 52.363µs 0.29% 0.979 1.327 0.07% 0.002µs 1 200
credit_card/is_card_number_no_luhn/37828224631000521389798 throughput 19097328.940op/s 19151658.578op/s ± 12785.978op/s 19153327.172op/s ± 7546.181op/s 19160737.254op/s 19168253.539op/s 19173819.109op/s 19176524.099op/s 0.12% -0.974 1.311 0.07% 904.105op/s 1 200
credit_card/is_card_number_no_luhn/x371413321323331 execution_time 6.028µs 6.039µs ± 0.010µs 6.037µs ± 0.003µs 6.040µs 6.069µs 6.074µs 6.076µs 0.66% 2.515 6.257 0.16% 0.001µs 1 200
credit_card/is_card_number_no_luhn/x371413321323331 throughput 164571853.801op/s 165601873.146op/s ± 259541.986op/s 165658104.582op/s ± 89203.339op/s 165747121.289op/s 165833291.788op/s 165863767.678op/s 165886668.752op/s 0.14% -2.506 6.218 0.16% 18352.390op/s 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
credit_card/is_card_number/ execution_time [3.911µs; 3.912µs] or [-0.010%; +0.010%] None None None
credit_card/is_card_number/ throughput [255622208.263op/s; 255671304.900op/s] or [-0.010%; +0.010%] None None None
credit_card/is_card_number/ 3782-8224-6310-005 execution_time [79.563µs; 79.670µs] or [-0.067%; +0.067%] None None None
credit_card/is_card_number/ 3782-8224-6310-005 throughput [12552118.577op/s; 12568982.311op/s] or [-0.067%; +0.067%] None None None
credit_card/is_card_number/ 378282246310005 execution_time [72.817µs; 72.906µs] or [-0.061%; +0.061%] None None None
credit_card/is_card_number/ 378282246310005 throughput [13716620.840op/s; 13733294.883op/s] or [-0.061%; +0.061%] None None None
credit_card/is_card_number/37828224631 execution_time [3.913µs; 3.914µs] or [-0.011%; +0.011%] None None None
credit_card/is_card_number/37828224631 throughput [255493907.042op/s; 255551390.259op/s] or [-0.011%; +0.011%] None None None
credit_card/is_card_number/378282246310005 execution_time [69.714µs; 69.809µs] or [-0.068%; +0.068%] None None None
credit_card/is_card_number/378282246310005 throughput [14325262.494op/s; 14344621.860op/s] or [-0.068%; +0.068%] None None None
credit_card/is_card_number/37828224631000521389798 execution_time [52.236µs; 52.247µs] or [-0.010%; +0.010%] None None None
credit_card/is_card_number/37828224631000521389798 throughput [19139838.235op/s; 19143783.560op/s] or [-0.010%; +0.010%] None None None
credit_card/is_card_number/x371413321323331 execution_time [6.036µs; 6.039µs] or [-0.023%; +0.023%] None None None
credit_card/is_card_number/x371413321323331 throughput [165592097.343op/s; 165667331.465op/s] or [-0.023%; +0.023%] None None None
credit_card/is_card_number_no_luhn/ execution_time [3.912µs; 3.912µs] or [-0.009%; +0.009%] None None None
credit_card/is_card_number_no_luhn/ throughput [255592546.464op/s; 255640636.507op/s] or [-0.009%; +0.009%] None None None
credit_card/is_card_number_no_luhn/ 3782-8224-6310-005 execution_time [64.426µs; 64.464µs] or [-0.030%; +0.030%] None None None
credit_card/is_card_number_no_luhn/ 3782-8224-6310-005 throughput [15512529.094op/s; 15521809.679op/s] or [-0.030%; +0.030%] None None None
credit_card/is_card_number_no_luhn/ 378282246310005 execution_time [58.388µs; 58.434µs] or [-0.039%; +0.039%] None None None
credit_card/is_card_number_no_luhn/ 378282246310005 throughput [17113499.165op/s; 17126904.819op/s] or [-0.039%; +0.039%] None None None
credit_card/is_card_number_no_luhn/37828224631 execution_time [3.912µs; 3.913µs] or [-0.010%; +0.010%] None None None
credit_card/is_card_number_no_luhn/37828224631 throughput [255544822.260op/s; 255598172.352op/s] or [-0.010%; +0.010%] None None None
credit_card/is_card_number_no_luhn/378282246310005 execution_time [54.902µs; 54.980µs] or [-0.071%; +0.071%] None None None
credit_card/is_card_number_no_luhn/378282246310005 throughput [18188973.093op/s; 18214590.497op/s] or [-0.070%; +0.070%] None None None
credit_card/is_card_number_no_luhn/37828224631000521389798 execution_time [52.210µs; 52.220µs] or [-0.009%; +0.009%] None None None
credit_card/is_card_number_no_luhn/37828224631000521389798 throughput [19149886.565op/s; 19153430.592op/s] or [-0.009%; +0.009%] None None None
credit_card/is_card_number_no_luhn/x371413321323331 execution_time [6.037µs; 6.040µs] or [-0.022%; +0.022%] None None None
credit_card/is_card_number_no_luhn/x371413321323331 throughput [165565903.123op/s; 165637843.169op/s] or [-0.022%; +0.022%] None None None

Group 4

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 42de22c 1772826505 rachel.yang/OTLP-trace-export
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
two way interface execution_time 18.525µs 27.288µs ± 10.213µs 19.033µs ± 0.300µs 36.150µs 45.395µs 50.719µs 73.348µs 285.38% 0.901 0.560 37.33% 0.722µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
two way interface execution_time [25.872µs; 28.703µs] or [-5.187%; +5.187%] None None None

Group 5

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 42de22c 1772826505 rachel.yang/OTLP-trace-export
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
write only interface execution_time 1.212µs 3.188µs ± 1.430µs 3.019µs ± 0.033µs 3.046µs 3.404µs 13.781µs 15.308µs 407.00% 7.513 57.178 44.75% 0.101µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
write only interface execution_time [2.989µs; 3.386µs] or [-6.218%; +6.218%] None None None

Group 6

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 42de22c 1772826505 rachel.yang/OTLP-trace-export
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
benching string interning on wordpress profile execution_time 162.061µs 162.765µs ± 0.329µs 162.711µs ± 0.155µs 162.877µs 163.432µs 163.975µs 164.419µs 1.05% 1.671 4.768 0.20% 0.023µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
benching string interning on wordpress profile execution_time [162.720µs; 162.811µs] or [-0.028%; +0.028%] None None None

Group 7

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 42de22c 1772826505 rachel.yang/OTLP-trace-export
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
tags/replace_trace_tags execution_time 2.330µs 2.392µs ± 0.017µs 2.390µs ± 0.005µs 2.403µs 2.416µs 2.422µs 2.438µs 2.04% -1.119 3.060 0.70% 0.001µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
tags/replace_trace_tags execution_time [2.390µs; 2.395µs] or [-0.097%; +0.097%] None None None

Group 8

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 42de22c 1772826505 rachel.yang/OTLP-trace-export
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
receiver_entry_point/report/2597 execution_time 3.288ms 3.312ms ± 0.014ms 3.308ms ± 0.007ms 3.317ms 3.340ms 3.360ms 3.371ms 1.89% 1.373 2.436 0.42% 0.001ms 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
receiver_entry_point/report/2597 execution_time [3.310ms; 3.314ms] or [-0.059%; +0.059%] None None None

Group 9

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 42de22c 1772826505 rachel.yang/OTLP-trace-export
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
redis/obfuscate_redis_string execution_time 33.406µs 33.958µs ± 0.891µs 33.559µs ± 0.055µs 33.635µs 35.853µs 35.868µs 37.243µs 10.98% 1.756 1.324 2.62% 0.063µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
redis/obfuscate_redis_string execution_time [33.835µs; 34.082µs] or [-0.364%; +0.364%] None None None

Group 10

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 42de22c 1772826505 rachel.yang/OTLP-trace-export
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
benching serializing traces from their internal representation to msgpack execution_time 13.993ms 14.070ms ± 0.034ms 14.065ms ± 0.016ms 14.081ms 14.133ms 14.199ms 14.264ms 1.41% 2.073 7.455 0.24% 0.002ms 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
benching serializing traces from their internal representation to msgpack execution_time [14.065ms; 14.074ms] or [-0.034%; +0.034%] None None None

Group 11

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 42de22c 1772826505 rachel.yang/OTLP-trace-export
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
concentrator/add_spans_to_concentrator execution_time 10.628ms 10.656ms ± 0.014ms 10.654ms ± 0.009ms 10.665ms 10.678ms 10.693ms 10.721ms 0.63% 0.896 2.095 0.13% 0.001ms 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
concentrator/add_spans_to_concentrator execution_time [10.654ms; 10.658ms] or [-0.018%; +0.018%] None None None

Group 12

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 42de22c 1772826505 rachel.yang/OTLP-trace-export
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
benching deserializing traces from msgpack to their internal representation execution_time 50.240ms 50.727ms ± 0.867ms 50.603ms ± 0.066ms 50.675ms 50.812ms 54.954ms 58.889ms 16.37% 7.694 62.840 1.71% 0.061ms 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
benching deserializing traces from msgpack to their internal representation execution_time [50.607ms; 50.847ms] or [-0.237%; +0.237%] None None None

Group 13

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 42de22c 1772826505 rachel.yang/OTLP-trace-export
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
sql/obfuscate_sql_string execution_time 91.247µs 91.449µs ± 0.197µs 91.421µs ± 0.058µs 91.488µs 91.633µs 91.902µs 93.732µs 2.53% 8.220 89.699 0.21% 0.014µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
sql/obfuscate_sql_string execution_time [91.421µs; 91.476µs] or [-0.030%; +0.030%] None None None

Group 14

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 42de22c 1772826505 rachel.yang/OTLP-trace-export
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
profile_add_sample_frames_x1000 execution_time 4.159ms 4.166ms ± 0.008ms 4.165ms ± 0.001ms 4.167ms 4.169ms 4.171ms 4.269ms 2.50% 12.331 163.381 0.18% 0.001ms 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
profile_add_sample_frames_x1000 execution_time [4.165ms; 4.167ms] or [-0.026%; +0.026%] None None None

Group 15

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 42de22c 1772826505 rachel.yang/OTLP-trace-export
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
normalization/normalize_service/normalize_service/A0000000000000000000000000000000000000000000000000... execution_time 534.116µs 535.679µs ± 1.449µs 535.048µs ± 0.473µs 536.466µs 538.177µs 540.519µs 542.256µs 1.35% 1.832 3.814 0.27% 0.102µs 1 200
normalization/normalize_service/normalize_service/A0000000000000000000000000000000000000000000000000... throughput 1844146.614op/s 1866804.882op/s ± 5024.999op/s 1868992.118op/s ± 1654.022op/s 1870096.188op/s 1871308.342op/s 1872063.986op/s 1872252.676op/s 0.17% -1.812 3.709 0.27% 355.321op/s 1 200
normalization/normalize_service/normalize_service/Data🐨dog🐶 繋がっ⛰てて execution_time 388.652µs 389.285µs ± 0.264µs 389.254µs ± 0.176µs 389.464µs 389.731µs 389.866µs 390.226µs 0.25% 0.412 0.121 0.07% 0.019µs 1 200
normalization/normalize_service/normalize_service/Data🐨dog🐶 繋がっ⛰てて throughput 2562620.247op/s 2568812.784op/s ± 1740.463op/s 2569017.832op/s ± 1159.478op/s 2570037.614op/s 2571311.812op/s 2572168.217op/s 2572993.787op/s 0.15% -0.408 0.115 0.07% 123.069op/s 1 200
normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters execution_time 189.722µs 190.211µs ± 0.196µs 190.206µs ± 0.130µs 190.345µs 190.545µs 190.646µs 190.770µs 0.30% 0.064 -0.215 0.10% 0.014µs 1 200
normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters throughput 5241923.506op/s 5257320.624op/s ± 5418.756op/s 5257458.413op/s ± 3588.915op/s 5260761.622op/s 5266493.518op/s 5268954.927op/s 5270874.996op/s 0.26% -0.059 -0.216 0.10% 383.164op/s 1 200
normalization/normalize_service/normalize_service/[empty string] execution_time 37.479µs 37.688µs ± 0.065µs 37.693µs ± 0.039µs 37.728µs 37.795µs 37.836µs 37.853µs 0.42% -0.247 0.263 0.17% 0.005µs 1 200
normalization/normalize_service/normalize_service/[empty string] throughput 26418263.701op/s 26534048.595op/s ± 45697.032op/s 26530399.383op/s ± 27636.486op/s 26560555.141op/s 26619620.502op/s 26639394.932op/s 26681324.455op/s 0.57% 0.259 0.270 0.17% 3231.268op/s 1 200
normalization/normalize_service/normalize_service/test_ASCII execution_time 45.795µs 45.907µs ± 0.084µs 45.893µs ± 0.037µs 45.934µs 46.028µs 46.125µs 46.644µs 1.64% 3.737 27.841 0.18% 0.006µs 1 200
normalization/normalize_service/normalize_service/test_ASCII throughput 21438881.967op/s 21783471.190op/s ± 39788.247op/s 21789951.825op/s ± 17557.665op/s 21806996.137op/s 21825881.499op/s 21832244.709op/s 21836282.703op/s 0.21% -3.651 26.825 0.18% 2813.454op/s 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
normalization/normalize_service/normalize_service/A0000000000000000000000000000000000000000000000000... execution_time [535.478µs; 535.879µs] or [-0.037%; +0.037%] None None None
normalization/normalize_service/normalize_service/A0000000000000000000000000000000000000000000000000... throughput [1866108.465op/s; 1867501.298op/s] or [-0.037%; +0.037%] None None None
normalization/normalize_service/normalize_service/Data🐨dog🐶 繋がっ⛰てて execution_time [389.249µs; 389.322µs] or [-0.009%; +0.009%] None None None
normalization/normalize_service/normalize_service/Data🐨dog🐶 繋がっ⛰てて throughput [2568571.573op/s; 2569053.996op/s] or [-0.009%; +0.009%] None None None
normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters execution_time [190.184µs; 190.238µs] or [-0.014%; +0.014%] None None None
normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters throughput [5256569.637op/s; 5258071.612op/s] or [-0.014%; +0.014%] None None None
normalization/normalize_service/normalize_service/[empty string] execution_time [37.679µs; 37.697µs] or [-0.024%; +0.024%] None None None
normalization/normalize_service/normalize_service/[empty string] throughput [26527715.426op/s; 26540381.764op/s] or [-0.024%; +0.024%] None None None
normalization/normalize_service/normalize_service/test_ASCII execution_time [45.895µs; 45.918µs] or [-0.025%; +0.025%] None None None
normalization/normalize_service/normalize_service/test_ASCII throughput [21777956.922op/s; 21788985.459op/s] or [-0.025%; +0.025%] None None None

Group 16

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 42de22c 1772826505 rachel.yang/OTLP-trace-export
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
profile_add_sample2_frames_x1000 execution_time 721.961µs 722.916µs ± 0.556µs 722.802µs ± 0.333µs 723.216µs 723.806µs 724.504µs 726.295µs 0.48% 1.669 6.476 0.08% 0.039µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
profile_add_sample2_frames_x1000 execution_time [722.839µs; 722.993µs] or [-0.011%; +0.011%] None None None

Group 17

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 42de22c 1772826505 rachel.yang/OTLP-trace-export
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
ip_address/quantize_peer_ip_address_benchmark execution_time 4.953µs 5.020µs ± 0.043µs 5.015µs ± 0.035µs 5.054µs 5.087µs 5.090µs 5.093µs 1.55% 0.383 -1.252 0.85% 0.003µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
ip_address/quantize_peer_ip_address_benchmark execution_time [5.014µs; 5.026µs] or [-0.118%; +0.118%] None None None

Group 18

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 42de22c 1772826505 rachel.yang/OTLP-trace-export
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
single_flag_killswitch/rules-based execution_time 188.275ns 190.790ns ± 2.348ns 190.450ns ± 1.428ns 191.687ns 195.645ns 197.578ns 201.836ns 5.98% 1.494 2.678 1.23% 0.166ns 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
single_flag_killswitch/rules-based execution_time [190.464ns; 191.115ns] or [-0.171%; +0.171%] None None None

Group 19

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 42de22c 1772826505 rachel.yang/OTLP-trace-export
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
normalization/normalize_name/normalize_name/Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Lo... execution_time 184.918µs 185.346µs ± 0.222µs 185.318µs ± 0.164µs 185.508µs 185.721µs 185.849µs 186.122µs 0.43% 0.486 -0.256 0.12% 0.016µs 1 200
normalization/normalize_name/normalize_name/Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Lo... throughput 5372813.483op/s 5395332.889op/s ± 6461.657op/s 5396136.447op/s ± 4789.599op/s 5400500.621op/s 5404295.591op/s 5406370.955op/s 5407795.797op/s 0.22% -0.481 -0.267 0.12% 456.908op/s 1 200
normalization/normalize_name/normalize_name/bad-name execution_time 18.030µs 18.127µs ± 0.057µs 18.123µs ± 0.025µs 18.148µs 18.196µs 18.225µs 18.715µs 3.27% 5.599 55.143 0.31% 0.004µs 1 200
normalization/normalize_name/normalize_name/bad-name throughput 53432019.429op/s 55166019.845op/s ± 170389.921op/s 55178886.241op/s ± 77114.017op/s 55255840.351op/s 55353723.795op/s 55402328.617op/s 55462858.528op/s 0.51% -5.361 51.929 0.31% 12048.387op/s 1 200
normalization/normalize_name/normalize_name/good execution_time 10.318µs 10.448µs ± 0.067µs 10.441µs ± 0.053µs 10.498µs 10.557µs 10.600µs 10.661µs 2.11% 0.389 -0.226 0.64% 0.005µs 1 200
normalization/normalize_name/normalize_name/good throughput 93801697.526op/s 95717195.242op/s ± 616267.553op/s 95776649.563op/s ± 482822.516op/s 96211209.945op/s 96623403.728op/s 96786619.789op/s 96918007.366op/s 1.19% -0.359 -0.281 0.64% 43576.697op/s 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
normalization/normalize_name/normalize_name/Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Lo... execution_time [185.315µs; 185.376µs] or [-0.017%; +0.017%] None None None
normalization/normalize_name/normalize_name/Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Lo... throughput [5394437.365op/s; 5396228.413op/s] or [-0.017%; +0.017%] None None None
normalization/normalize_name/normalize_name/bad-name execution_time [18.119µs; 18.135µs] or [-0.044%; +0.044%] None None None
normalization/normalize_name/normalize_name/bad-name throughput [55142405.441op/s; 55189634.250op/s] or [-0.043%; +0.043%] None None None
normalization/normalize_name/normalize_name/good execution_time [10.439µs; 10.457µs] or [-0.089%; +0.089%] None None None
normalization/normalize_name/normalize_name/good throughput [95631786.486op/s; 95802603.998op/s] or [-0.089%; +0.089%] None None None

Baseline

Omitted due to size.

@dd-octo-sts
Copy link
Contributor

dd-octo-sts bot commented Mar 2, 2026

Artifact Size Benchmark Report

aarch64-alpine-linux-musl
Artifact Baseline Commit Change
/aarch64-alpine-linux-musl/lib/libdatadog_profiling.so 8.51 MB 8.57 MB +.73% (+64.21 KB) 🔍
/aarch64-alpine-linux-musl/lib/libdatadog_profiling.a 97.30 MB 97.74 MB +.45% (+448.50 KB) 🔍
aarch64-unknown-linux-gnu
Artifact Baseline Commit Change
/aarch64-unknown-linux-gnu/lib/libdatadog_profiling.a 112.92 MB 113.47 MB +.48% (+559.65 KB) 🔍
/aarch64-unknown-linux-gnu/lib/libdatadog_profiling.so 11.12 MB 11.13 MB +.11% (+13.01 KB) 🔍
libdatadog-x64-windows
Artifact Baseline Commit Change
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.dll 27.16 MB 27.30 MB +.51% (+143.00 KB) 🔍
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.lib 76.26 KB 76.26 KB 0% (0 B) 👌
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.pdb 185.98 MB 186.61 MB +.34% (+648.00 KB) 🔍
/libdatadog-x64-windows/debug/static/datadog_profiling_ffi.lib 916.65 MB 920.64 MB +.43% (+3.99 MB) 🔍
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.dll 9.93 MB 10.00 MB +.68% (+70.00 KB) 🔍
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.lib 76.26 KB 76.26 KB 0% (0 B) 👌
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.pdb 24.76 MB 24.89 MB +.50% (+128.00 KB) 🔍
/libdatadog-x64-windows/release/static/datadog_profiling_ffi.lib 51.43 MB 51.69 MB +.51% (+270.58 KB) 🔍
libdatadog-x86-windows
Artifact Baseline Commit Change
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.dll 22.97 MB 23.09 MB +.55% (+130.00 KB) 🔍
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.lib 77.44 KB 77.44 KB 0% (0 B) 👌
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.pdb 190.16 MB 190.83 MB +.35% (+688.00 KB) 🔍
/libdatadog-x86-windows/debug/static/datadog_profiling_ffi.lib 900.31 MB 904.32 MB +.44% (+4.00 MB) 🔍
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.dll 7.53 MB 7.58 MB +.64% (+49.50 KB) 🔍
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.lib 77.44 KB 77.44 KB 0% (0 B) 👌
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.pdb 26.52 MB 26.66 MB +.50% (+136.00 KB) 🔍
/libdatadog-x86-windows/release/static/datadog_profiling_ffi.lib 47.06 MB 47.30 MB +.52% (+252.02 KB) 🔍
x86_64-alpine-linux-musl
Artifact Baseline Commit Change
/x86_64-alpine-linux-musl/lib/libdatadog_profiling.a 85.27 MB 85.66 MB +.46% (+402.36 KB) 🔍
/x86_64-alpine-linux-musl/lib/libdatadog_profiling.so 10.04 MB 10.09 MB +.50% (+52.21 KB) 🔍
x86_64-unknown-linux-gnu
Artifact Baseline Commit Change
/x86_64-unknown-linux-gnu/lib/libdatadog_profiling.a 105.90 MB 106.38 MB +.45% (+492.39 KB) 🔍
/x86_64-unknown-linux-gnu/lib/libdatadog_profiling.so 11.79 MB 11.85 MB +.50% (+60.69 KB) 🔍

@codecov-commenter
Copy link

codecov-commenter commented Mar 3, 2026

Codecov Report

❌ Patch coverage is 76.74419% with 150 lines in your changes missing coverage. Please review.
✅ Project coverage is 71.44%. Comparing base (8fb3175) to head (42de22c).
⚠️ Report is 16 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #1641      +/-   ##
==========================================
+ Coverage   71.19%   71.44%   +0.25%     
==========================================
  Files         425      431       +6     
  Lines       62666    63539     +873     
==========================================
+ Hits        44615    45396     +781     
- Misses      18051    18143      +92     
Components Coverage Δ
libdd-crashtracker 63.00% <ø> (-0.06%) ⬇️
libdd-crashtracker-ffi 16.56% <ø> (+0.92%) ⬆️
libdd-alloc 98.77% <ø> (ø)
libdd-data-pipeline 86.76% <76.74%> (-0.62%) ⬇️
libdd-data-pipeline-ffi 76.20% <ø> (+3.36%) ⬆️
libdd-common 79.73% <ø> (ø)
libdd-common-ffi 73.40% <ø> (ø)
libdd-telemetry 62.48% <ø> (ø)
libdd-telemetry-ffi 16.75% <ø> (ø)
libdd-dogstatsd-client 82.64% <ø> (ø)
datadog-ipc 80.35% <ø> (-0.39%) ⬇️
libdd-profiling 81.60% <ø> (-0.01%) ⬇️
libdd-profiling-ffi 63.65% <ø> (ø)
datadog-sidecar 34.48% <ø> (+1.03%) ⬆️
datdog-sidecar-ffi 16.55% <ø> (+4.13%) ⬆️
spawn-worker 54.69% <ø> (ø)
libdd-tinybytes 93.16% <ø> (ø)
libdd-trace-normalization 81.71% <ø> (ø)
libdd-trace-obfuscation 94.69% <ø> (+0.01%) ⬆️
libdd-trace-protobuf 68.00% <ø> (ø)
libdd-trace-utils 89.07% <ø> (+0.10%) ⬆️
datadog-tracer-flare 88.95% <ø> (-1.50%) ⬇️
libdd-log 74.69% <ø> (ø)
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

/// Sets the tracer/SDK name for OTLP resource attribute `telemetry.sdk.name`
/// (e.g. "dd-trace-py"). When unset, OTLP uses "libdatadog".
#[no_mangle]
pub unsafe extern "C" fn ddog_trace_exporter_config_set_tracer_name(
Copy link

Choose a reason for hiding this comment

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

Is tracer name a required field in the otlp trace payload. It would be nice if we went to with a minimal implementation where we defer unnecessary configurations. Also can the tracer name be interfered from other configurations?


#[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct KeyValue {
Copy link

Choose a reason for hiding this comment

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

Did we look into vendoring or adding opentelemetry-rust as a dependency to the libdd-data-pipeline so we can re-use existing functionality (ex).

At the minimum we should make it clear which components are borrowed from opentelemetry-rust and include a versioned link to the original implementation.

}

#[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")]
Copy link

Choose a reason for hiding this comment

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

DO we need the rename_all option here?

}

/// OTLP SpanKind enum values.
pub mod span_kind {
Copy link

Choose a reason for hiding this comment

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

Why are we using snakeCasing here? This is inconsistent with AnyValue,

}
}

fn build_resource(metadata: &TracerMetadata) -> Resource {
Copy link

Choose a reason for hiding this comment

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

We have a similar function in dd-trace-rs. It would be nice if we could pull out some of this logic into a common rust crate and re-use it in both places. We can do something similar with a few other components in this PR (re-use helpers for applying otlp configurations).

cc: @paullegranddc

Copy link
Contributor

Choose a reason for hiding this comment

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

let's live with the duplication for now

@rachelyangdog rachelyangdog marked this pull request as ready for review March 6, 2026 19:18
Copy link
Contributor

@paullegranddc paullegranddc left a comment

Choose a reason for hiding this comment

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

To test the otlp trace export, you can add test agent snapshot tests here

Comment on lines +1 to +2
// Copyright 2024-Present Datadog, Inc. https://www.datadoghq.com/
// SPDX-License-Identifier: Apache-2.0
Copy link
Contributor

Choose a reason for hiding this comment

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

I think we should parse the configurations from the host language, and not in libdatadg.

The way we would configure the TraceExporter for agent_url for instance would be

1) language_configuration resolves agent_url  from different sources
2) when the tracer wants to instantiate a TraceExporter it first creates a TraceExporterBuilder and calls setters on it (set_agent_url in this case) 
3) TraceExporterBuilder::build gives a TraceExporter containing the agent_url 
4) In TraceExporter::send we can just read self.agent_url

Comment on lines +30 to +34
pub async fn send_otlp_traces_http(
client: &HttpClient,
config: &OtlpTraceConfig,
json_body: Vec<u8>,
) -> Result<(), TraceExporterError> {
Copy link
Contributor

Choose a reason for hiding this comment

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

You should use libdd_trace_utils::send_with_retry::send_with_retry to send a serialized payloads to the agent, it already handles retries/telemetry (defined here)

//!
//! The Rust implementation in opentelemetry-rust uses `prost`-generated types with an optional
//! `with-serde` feature (`opentelemetry-proto` crate). We use hand-rolled serde structs here to
//! avoid the `prost` + `tonic` dependency tree in this early implementation. If/when protobuf
Copy link
Contributor

Choose a reason for hiding this comment

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

agreed with duplicating type defs in here, and let's add opentelemetry-proto when we actually want to add http/proto export

Comment on lines +1 to +3
// Copyright 2024-Present Datadog, Inc. https://www.datadoghq.com/
// SPDX-License-Identifier: Apache-2.0

Copy link
Contributor

Choose a reason for hiding this comment

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

You should probably move both this file and mapper.rs to libdd_trace_utils in an otlp_encoder module/folder there to put the code

Comment on lines +29 to +30
where
T::Text: Borrow<str>,
Copy link
Contributor

Choose a reason for hiding this comment

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

This is not necessary, T::Text: Borrow<str> is already required in the definition of TraceData and the code compiles without it

}
}

fn build_resource(metadata: &TracerMetadata) -> Resource {
Copy link
Contributor

Choose a reason for hiding this comment

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

let's live with the duplication for now

Comment on lines +108 to +119
pub struct AnyValue {
#[serde(skip_serializing_if = "Option::is_none")]
pub string_value: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub bool_value: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub int_value: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub double_value: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub bytes_value: Option<String>,
}
Copy link
Contributor

Choose a reason for hiding this comment

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

Should be an enum instead

#[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")]
enum AnyValue {
  StringValue(String),
  BoolValue(bool),
 // and so on
}

Comment on lines +515 to +516
where
T::Text: Borrow<str>,
Copy link
Contributor

Choose a reason for hiding this comment

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

same as the comment before, this trait bound is no necessary

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.

4 participants