Skip to content

chore(antithesis): Intro Intake V3 - #2214

Open
blt wants to merge 1 commit into
mainfrom
blt/chore_antithesis_intro_intake_v3
Open

chore(antithesis): Intro Intake V3#2214
blt wants to merge 1 commit into
mainfrom
blt/chore_antithesis_intro_intake_v3

Conversation

@blt

@blt blt commented Jul 27, 2026

Copy link
Copy Markdown
Contributor

Summary

This commit introduces a v3 intake into antithesis harness to support
symmetric difference with ADP-on -- v2 by default -- and ADP-off -- v3
by default.

Change Type

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

How did you test this PR?

References

This commit introduces a v3 intake into antithesis harness to support
symmetric difference with ADP-on -- v2 by default -- and ADP-off -- v3
by default.
@dd-octo-sts dd-octo-sts Bot added the area/test All things testing: unit/integration, correctness, SMP regression, etc. label Jul 27, 2026
@datadog-official

datadog-official Bot commented Jul 27, 2026

Copy link
Copy Markdown

Pipelines

Unblock PR with BitsAI

⚠️ Warnings

🚦 2 Pipeline jobs failed

DataDog/saluki | check-fmt   View in Datadog   GitLab

DataDog/saluki | check-unused-deps   View in Datadog   GitLab

Useful? React with 👍 / 👎

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

@pr-commenter

pr-commenter Bot commented Jul 27, 2026

Copy link
Copy Markdown

Binary Size Analysis (Agent Data Plane)

Baseline: e34c659 · Comparison: 66abc6e · diff
Analysis Configuration: stripped binaries · Pass/Fail Threshold: +5%
Sizes: 41.09 MiB (baseline) vs 41.09 MiB (comparison)
Size Change: +8 B (+0.00%)

✅ Binary size difference within threshold

Changes by Module
Module File Size Symbols
anon.44a0faa3240fa409baa379409d152aec.1.llvm.11867780881135177262 +130 B 1
anon.44a0faa3240fa409baa379409d152aec.1.llvm.4920541009509882327 -129 B 1
anon.44a0faa3240fa409baa379409d152aec.4.llvm.11867780881135177262 +114 B 1
anon.44a0faa3240fa409baa379409d152aec.4.llvm.4920541009509882327 -113 B 1
anon.44a0faa3240fa409baa379409d152aec.3.llvm.11867780881135177262 +109 B 1
anon.44a0faa3240fa409baa379409d152aec.3.llvm.4920541009509882327 -108 B 1
anon.44a0faa3240fa409baa379409d152aec.0.llvm.11867780881135177262 +97 B 1
anon.44a0faa3240fa409baa379409d152aec.0.llvm.4920541009509882327 -96 B 1
anon.44a0faa3240fa409baa379409d152aec.2.llvm.11867780881135177262 +95 B 1
anon.44a0faa3240fa409baa379409d152aec.2.llvm.4920541009509882327 -94 B 1
[Unmapped] +3 B 1
Detailed Symbol Changes
    FILE SIZE        VM SIZE    
 --------------  -------------- 
  [NEW]    +130  [NEW]     +40    anon.44a0faa3240fa409baa379409d152aec.1.llvm.11867780881135177262
  [NEW]    +114  [NEW]     +24    anon.44a0faa3240fa409baa379409d152aec.4.llvm.11867780881135177262
  [NEW]    +109  [NEW]     +19    anon.44a0faa3240fa409baa379409d152aec.3.llvm.11867780881135177262
  [NEW]     +97  [NEW]      +7    anon.44a0faa3240fa409baa379409d152aec.0.llvm.11867780881135177262
  [NEW]     +95  [NEW]      +5    anon.44a0faa3240fa409baa379409d152aec.2.llvm.11867780881135177262
  +7.1%      +3  [ = ]       0    [Unmapped]
  [DEL]     -94  [DEL]      -5    anon.44a0faa3240fa409baa379409d152aec.2.llvm.4920541009509882327
  [DEL]     -96  [DEL]      -7    anon.44a0faa3240fa409baa379409d152aec.0.llvm.4920541009509882327
  [DEL]    -108  [DEL]     -19    anon.44a0faa3240fa409baa379409d152aec.3.llvm.4920541009509882327
  [DEL]    -113  [DEL]     -24    anon.44a0faa3240fa409baa379409d152aec.4.llvm.4920541009509882327
  [DEL]    -129  [DEL]     -40    anon.44a0faa3240fa409baa379409d152aec.1.llvm.4920541009509882327
  +0.0%      +8  [ = ]       0    TOTAL

@blt
blt marked this pull request as ready for review July 27, 2026 23:17
@blt
blt requested review from a team as code owners July 27, 2026 23:17

@datadog-official datadog-official Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Datadog Autotest: PASS

More details

The intake-oracle changes are internally consistent across the v2 source-gated decoder, v3 columnar cursor handling, sketch path, and request measurement stack. Focused execution could not complete because the sandbox could neither install the pinned Rust 1.94 toolchain nor fetch the required Git dependency, leaving runtime validation as the remaining gap.

Was this helpful? React 👍 or 👎

Open Bits AI session

🤖 Datadog Autotest · Commit 66abc6e · What is Autotest? · @DataDog review to ask questions · Any feedback? Reach out in #autotest

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 66abc6ebcf

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Router::new().route("/api/v2/series", post(metrics::handle_series).layer(layers))
Router::new()
.route("/api/v2/series", post(metrics::handle_series))
.route("/api/intake/metrics/v3/series", post(metrics::handle_series_v3))

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Enable v3 emission before adding the v3 intake route

In the checked differential scenario, first_sample_config still unconditionally appends use_v2_api_series: true in test/antithesis/harness/src/config.rs:178-184, so the reference Agent continues posting series to /api/v2/series and never invokes this new handler. Consequently the v3 decoder and Pyld26–Pyld59 assertions are not exercised by Antithesis and can remain false-green; disable the v2 pin (and align the configured endpoint path) as part of enabling this route.

Useful? React with 👍 / 👎.

Comment on lines +645 to +647
let reserved = tags
.iter()
.find(|tag| tag.starts_with("device:") || tag.starts_with("dd.internal.resource:"));

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Exempt v3 sketches from the reserved-tag assertion

When a v3 sketch carries device: or dd.internal.resource: tags, this unconditional assertion reports Pyld14 as failed even though the repository's v3 encoder intentionally preserves those tags for sketches (lib/saluki-components/src/encoders/datadog/metrics/mod.rs:1577-1579), with an explicit test at lines 2615-2631. Restrict this scalar-series resource-promotion rule to non-sketch kinds, as the separate /api/beta/sketches checks already do, or valid v3 sketch output will falsely redden an experiment.

Useful? React with 👍 / 👎.

Comment on lines +1090 to +1092
fn kept_series_tags(name: &str, tags: &[String], resources: &[(String, String)]) -> Option<Vec<String>> {
if tags.len() > MAX_TAG_COUNT || resources.len() > MAX_RESOURCE_COUNT || !metric_name_kept(name) {
return None;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Drop v3 series when origin processing fails

When the backend's source-dependent processOrigin validation rejects a series—the case acknowledged immediately above—kept_series_tags still returns Some because it receives neither the origin nor source. The fact that origin is not part of Context does not make this harmless: production drops the entire series, so its context must be absent, whereas this decoder records a phantom context and can create a false differential mismatch. Thread the source/origin result into the per-series keep decision.

Useful? React with 👍 / 👎.

// EVERY source, agent included: the name stays `string` in the bytes-tag variant too. The
// leading 0xFF guarantees invalid UTF-8 regardless of the generated suffix.
#[test]
fn prop_non_utf8_name_rejected_for_all_sources(suffix in prop::collection::vec(any::<u8>(), 0..8)) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Prefix the new proptest with property_test_

This newly added proptest lacks the literal property_test_ prefix, so the Makefile's name filters run it in the debug-mode test job instead of the dedicated release-mode test-property job. Rename it with the required prefix so the new decoder property receives the intended release-mode coverage.

AGENTS.md reference: AGENTS.md:L39-L41

Useful? React with 👍 / 👎.

.collect::<Vec<_>>()
};

let mut resources: Vec<Vec<(String, String)>> = vec![Vec::new()];

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Apply metadata resources to resource set zero

When a v3 payload carries common resources in Payload.metadata.resources and a series uses resourcesRefs = 0, this initialization leaves resource set zero empty; meta_pairs are appended only to explicit dictionary groups in the loop below. Since zero represents the empty per-series set, it is precisely the case where global metadata resources such as host must still apply. The decoder therefore loses the host tag, falsely fails Pyld17, and records a context that differs from production for payloads using metadata-only resources; initialize the zero set with meta_pairs as well.

Useful? React with 👍 / 👎.

@pr-commenter

pr-commenter Bot commented Jul 27, 2026

Copy link
Copy Markdown

Regression Detector (Agent Data Plane)

Run ID: 57fe5c59-a68a-4af5-9c33-b3ffbdae933d
Baseline: e34c659f · Comparison: 66abc6eb · diff

Optimization Goals: ✅ No significant changes detected

Fine details of change detection per experiment (3)

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

experiment goal Δ mean % links
quality_gates_rss_dsd_low memory ⚪ +0.10 metrics profiles logs
quality_gates_rss_idle memory ⚪ -0.06 metrics profiles logs
quality_gates_rss_dsd_medium memory ⚪ -0.21 metrics profiles logs
Bounds Checks: ✅ Passed (3)
experiment check replicates observed links
quality_gates_rss_dsd_low memory_usage 10/10 ✅ 45.4 MiB ≤ 50 MiB metrics profiles logs
quality_gates_rss_dsd_medium memory_usage 10/10 ✅ 67.5 MiB ≤ 75 MiB metrics profiles logs
quality_gates_rss_idle memory_usage 10/10 ✅ 31.1 MiB ≤ 40 MiB metrics profiles logs
Explanation

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

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

Labels

area/test All things testing: unit/integration, correctness, SMP regression, etc.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant