Skip to content

ci: report potentially impacted downstream repositories - #2494

Draft
anais-raison wants to merge 43 commits into
mainfrom
codex/downstream-impact-mvp-20260909
Draft

ci: report potentially impacted downstream repositories#2494
anais-raison wants to merge 43 commits into
mainfrom
codex/downstream-impact-mvp-20260909

Conversation

@anais-raison

Copy link
Copy Markdown
Contributor

What does this change?

Adds the first, non-blocking phase of downstream impact analysis for libdatadog pull requests:

  • a versioned inventory of 16 direct, wrapper, and indirect consumers;
  • component-to-consumer path mappings;
  • a dependency-free Python detector that emits JSON, Markdown, and a GitHub Actions matrix;
  • a pull-request workflow that publishes the report as a job summary and artifact;
  • unit tests, including a conservative fallback for less common published components.

This phase intentionally reports potential impact only. It does not claim downstream compatibility yet.

Validation

  • python3 -m unittest scripts/tests/test_downstream_impact.py (7 tests)
  • Python bytecode compilation
  • JSON parsing
  • GitHub workflow YAML parsing
  • smoke scenarios for targeted and conservative 16/16 impact selection

Follow-up

Consume the generated matrix with validation jobs by mode (rust-crates, rust-source, native-artifact, native-package, packaging, and contract-tests), starting in report-only mode.

@datadog-datadog-prod-us1

datadog-datadog-prod-us1 Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Pipelines  Tests

⚠️ Warnings

Your PR has failed checks. Please review the issues below and take necessary action before merging.

🚦 3 Pipeline jobs failed

Lint | actionlint — 🔧 Needs a code fix, caused by this PR

View more details · View in GitHub Actions

Lint | Validate CODEOWNERS

View more details · View in GitHub Actions

Required checks pass | allchecks

View more details · View in GitHub Actions

ℹ️ Info

No other issues found (see more)

🧪 All tests passed
❄️ No new flaky tests detected

🎯 Code Coverage (details)
Patch Coverage: 100.00%
Overall Coverage: 77.77% (+0.12%)

Useful? React with 👍 / 👎

This comment will be updated automatically if new data arrives.
🔗 Commit SHA: d334a78 | Docs | View more details | Give us feedback!

@dd-octo-sts

dd-octo-sts Bot commented Sep 9, 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.so 8.45 MB 8.45 MB 0% (0 B) 👌
/aarch64-alpine-linux-musl/lib/libdatadog_profiling.a 91.37 MB 91.37 MB 0% (0 B) 👌
aarch64-unknown-linux-gnu
Artifact Baseline Commit Change
/aarch64-unknown-linux-gnu/lib/libdatadog_profiling.so 11.38 MB 11.38 MB 0% (0 B) 👌
/aarch64-unknown-linux-gnu/lib/libdatadog_profiling.a 102.71 MB 102.71 MB 0% (0 B) 👌
libdatadog-x64-windows
Artifact Baseline Commit Change
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.dll 27.36 MB 27.36 MB 0% (0 B) 👌
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.lib 96.08 KB 96.08 KB 0% (0 B) 👌
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.pdb 185.93 MB 185.96 MB +.01% (+32.00 KB) 🔍
/libdatadog-x64-windows/debug/static/datadog_profiling_ffi.lib 804.20 MB 804.20 MB 0% (0 B) 👌
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.dll 9.03 MB 9.03 MB 0% (0 B) 👌
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.lib 96.08 KB 96.08 KB 0% (0 B) 👌
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.pdb 26.26 MB 26.26 MB 0% (0 B) 👌
/libdatadog-x64-windows/release/static/datadog_profiling_ffi.lib 52.70 MB 52.70 MB 0% (0 B) 👌
libdatadog-x86-windows
Artifact Baseline Commit Change
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.dll 23.80 MB 23.80 MB 0% (0 B) 👌
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.lib 97.58 KB 97.58 KB 0% (0 B) 👌
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.pdb 190.71 MB 190.72 MB +0% (+8.00 KB) 👌
/libdatadog-x86-windows/debug/static/datadog_profiling_ffi.lib 792.13 MB 792.13 MB 0% (0 B) 👌
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.dll 6.96 MB 6.96 MB 0% (0 B) 👌
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.lib 97.58 KB 97.58 KB 0% (0 B) 👌
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.pdb 28.21 MB 28.21 MB 0% (0 B) 👌
/libdatadog-x86-windows/release/static/datadog_profiling_ffi.lib 49.74 MB 49.74 MB 0% (0 B) 👌
x86_64-alpine-linux-musl
Artifact Baseline Commit Change
/x86_64-alpine-linux-musl/lib/libdatadog_profiling.a 81.56 MB 81.56 MB 0% (0 B) 👌
/x86_64-alpine-linux-musl/lib/libdatadog_profiling.so 9.42 MB 9.42 MB 0% (0 B) 👌
x86_64-unknown-linux-gnu
Artifact Baseline Commit Change
/x86_64-unknown-linux-gnu/lib/libdatadog_profiling.a 97.38 MB 97.38 MB 0% (0 B) 👌
/x86_64-unknown-linux-gnu/lib/libdatadog_profiling.so 11.48 MB 11.48 MB 0% (0 B) 👌

@pr-commenter

pr-commenter Bot commented Sep 9, 2026

Copy link
Copy Markdown

Benchmarks

Comparison

Benchmark execution time: 2026-09-11 14:13:33

Comparing candidate commit d334a78 in PR branch codex/downstream-impact-mvp-20260909 with baseline commit 132842f in branch main.

📊 Benchmarking dashboard

Found 16 performance improvements and 5 performance regressions! Performance is the same for 135 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:otlp/e2e_json/1x1000

  • 🟥 execution_time [+358.516µs; +363.380µs] or [+8.929%; +9.050%]

scenario:otlp/encode_json/1x1000

  • 🟥 execution_time [+338.561µs; +342.656µs] or [+19.954%; +20.196%]

scenario:otlp/encode_protobuf/1x1000

  • 🟩 execution_time [-97.490µs; -95.328µs] or [-8.476%; -8.288%]

scenario:vec_map/as_deduped_map/already_deduped/8

  • 🟩 execution_time [-0.610ns; -0.603ns] or [-4.212%; -4.158%]

scenario:vec_map/contains_key/128

  • 🟩 execution_time [-1.129µs; -1.117µs] or [-7.167%; -7.091%]
  • 🟩 throughput [+620127.884op/s; +627065.559op/s] or [+7.634%; +7.720%]

scenario:vec_map/contains_key/16

  • 🟩 execution_time [-25.142ns; -24.697ns] or [-9.868%; -9.693%]
  • 🟩 throughput [+6748568.244op/s; +6864316.508op/s] or [+10.746%; +10.931%]

scenario:vec_map/contains_key/64

  • 🟩 execution_time [-341.779ns; -336.286ns] or [-8.116%; -7.986%]
  • 🟩 throughput [+1320159.157op/s; +1341295.089op/s] or [+8.686%; +8.825%]

scenario:vec_map/contains_key/8

  • 🟩 execution_time [-3.729ns; -3.589ns] or [-4.997%; -4.809%]
  • 🟩 throughput [+5424277.211op/s; +5630019.711op/s] or [+5.060%; +5.252%]

scenario:vec_map/get_hit/128

  • 🟩 throughput [+382257.620op/s; +390618.535op/s] or [+4.082%; +4.171%]

scenario:vec_map/get_hit/16

  • 🟩 execution_time [-36.115ns; -35.786ns] or [-15.291%; -15.151%]
  • 🟩 throughput [+12107806.294op/s; +12215721.546op/s] or [+17.873%; +18.033%]

scenario:vec_map/get_hit/8

  • 🟩 execution_time [-11.063ns; -10.993ns] or [-17.016%; -16.910%]
  • 🟩 throughput [+25053710.687op/s; +25225692.001op/s] or [+20.360%; +20.499%]

scenario:vec_map/get_miss/128

  • 🟩 execution_time [-4.124ns; -3.825ns] or [-5.095%; -4.725%]

scenario:vec_map/get_miss/16

  • 🟥 execution_time [+17.943ns; +18.375ns] or [+191.413%; +196.024%]

scenario:vec_map/get_miss/64

  • 🟥 execution_time [+21.883ns; +22.487ns] or [+75.580%; +77.667%]

scenario:vec_map/get_miss/8

  • 🟥 execution_time [+10.917ns; +11.148ns] or [+145.261%; +148.333%]

Benchmark execution time: 2026-09-11 14:08:26

Comparing candidate commit d334a78 in PR branch codex/downstream-impact-mvp-20260909 with baseline commit 132842f in branch main.

📊 Benchmarking dashboard

Found 3 performance improvements and 23 performance regressions! Performance is the same for 140 metrics, 10 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:alloc_free/system/4096

  • 🟥 execution_time [+12.000ns; +12.152ns] or [+14.628%; +14.814%]

scenario:credit_card/is_card_number/x371413321323331

  • 🟥 execution_time [+728.488ns; +731.140ns] or [+12.724%; +12.771%]
  • 🟥 throughput [-19783926.589op/s; -19712650.707op/s] or [-11.327%; -11.286%]

scenario:credit_card/is_card_number_no_luhn/x371413321323331

  • 🟥 execution_time [+725.807ns; +728.329ns] or [+12.677%; +12.721%]
  • 🟥 throughput [-19715277.094op/s; -19646536.673op/s] or [-11.288%; -11.248%]

scenario:datadog_sample_span/unicode_uppercase_service_rule/wall_time

  • 🟥 execution_time [+15.233ns; +15.387ns] or [+4.446%; +4.490%]

scenario:no_profiler/short_circuit/4096

  • 🟥 execution_time [+7.081ns; +7.246ns] or [+7.293%; +7.462%]

scenario:normalization/normalize_name/normalize_name/Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Lo...

  • 🟥 execution_time [+18.832µs; +19.003µs] or [+10.103%; +10.194%]
  • 🟥 throughput [-496394.869op/s; -492068.145op/s] or [-9.253%; -9.173%]

scenario:normalization/normalize_name/normalize_name/bad-name

  • 🟥 execution_time [+1.023µs; +1.065µs] or [+5.784%; +6.021%]
  • 🟥 throughput [-3209276.191op/s; -3090960.297op/s] or [-5.675%; -5.465%]

scenario:normalization/normalize_name/normalize_name/good

  • 🟥 execution_time [+1.088µs; +1.118µs] or [+11.031%; +11.343%]
  • 🟥 throughput [-10328996.398op/s; -10070237.478op/s] or [-10.183%; -9.928%]

scenario:normalization/normalize_service/normalize_service/A0000000000000000000000000000000000000000000000000...

  • 🟥 execution_time [+37.049µs; +37.474µs] or [+7.439%; +7.524%]
  • 🟥 throughput [-140568.892op/s; -138966.374op/s] or [-7.001%; -6.921%]

scenario:normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters

  • 🟥 execution_time [+21.330µs; +21.444µs] or [+12.606%; +12.673%]
  • 🟥 throughput [-664888.760op/s; -661436.006op/s] or [-11.250%; -11.192%]

scenario:profiler_attached/fast_path_noop/16

  • 🟥 execution_time [+2.818ns; +2.829ns] or [+19.447%; +19.516%]

scenario:profiler_attached/fast_path_noop/256

  • 🟥 execution_time [+2.821ns; +2.828ns] or [+19.470%; +19.520%]

scenario:profiler_attached/fast_path_noop/4096

  • 🟥 execution_time [+2.822ns; +2.831ns] or [+19.475%; +19.534%]

scenario:profiler_attached/fast_path_noop/64

  • 🟥 execution_time [+2.824ns; +2.831ns] or [+19.488%; +19.533%]

scenario:profiler_attached/fast_path_noop/65536

  • 🟥 execution_time [+2.828ns; +2.835ns] or [+19.517%; +19.566%]

scenario:profiler_attached/fast_path_system/4096

  • 🟥 execution_time [+5.589ns; +5.778ns] or [+5.768%; +5.963%]

scenario:sql/obfuscate_sql_string

  • 🟩 execution_time [-12.517µs; -12.318µs] or [-4.275%; -4.207%]

scenario:trace_buffer/2_senders/no_delay

  • 🟩 execution_time [-133.221µs; -116.888µs] or [-7.990%; -7.011%]
  • 🟩 throughput [+81989.768op/s; +93483.519op/s] or [+7.590%; +8.654%]

Unstable benchmarks

These benchmarks have a confidence interval too wide to call a change; treat them as noise rather than signal.

scenario:datadog_sample_span/parent_not_sampled_short_circuit/allocated_bytes

  • unstable execution_time [-0.000ns; +0.000ns] or [+557.091%; -556.373%]

scenario:datadog_sample_span/parent_sampled_short_circuit/allocated_bytes

  • unstable execution_time [-0.000ns; +0.000ns] or [+554.965%; -555.372%]

scenario:glob_matcher/ascii_case_insensitive_match/allocated_bytes

  • unstable execution_time [-0.000ns; +0.000ns] or [+549.078%; -552.613%]

scenario:glob_matcher/ascii_exact_match/allocated_bytes

  • unstable execution_time [-0.000ns; +0.000ns] or [+545.811%; -551.089%]

scenario:glob_matcher/ascii_exact_miss/allocated_bytes

  • unstable execution_time [-0.000ns; +0.000ns] or [+584.659%; -569.552%]

scenario:glob_matcher/ascii_wildcard_backtrack_match/allocated_bytes

  • unstable execution_time [-0.000ns; +0.000ns] or [+551.137%; -553.576%]

scenario:glob_matcher/ascii_wildcard_heavy_backtrack/allocated_bytes

  • unstable execution_time [-0.000ns; +0.000ns] or [+556.606%; -556.145%]

scenario:glob_matcher/ascii_wildcard_question_match/allocated_bytes

  • unstable execution_time [-0.000ns; +0.000ns] or [+549.634%; -552.873%]

scenario:glob_matcher/ascii_wildcard_star_match/allocated_bytes

  • unstable execution_time [-0.000ns; +0.000ns] or [+554.964%; -555.372%]

scenario:glob_matcher/star_short_circuit/allocated_bytes

  • unstable execution_time [-0.000ns; +0.000ns] or [+556.415%; -556.055%]

Candidate

Omitted due to size.

Baseline

Omitted due to size.

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

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant