Skip to content

enhancement(antithesis): DogStatsD load generation#1782

Open
blt wants to merge 2 commits into
blt/assert_adp_aliveness_on_bootup_add_sometimes_check_to_forwardingfrom
blt/dogstatsd-load-generation
Open

enhancement(antithesis): DogStatsD load generation#1782
blt wants to merge 2 commits into
blt/assert_adp_aliveness_on_bootup_add_sometimes_check_to_forwardingfrom
blt/dogstatsd-load-generation

Conversation

@blt
Copy link
Copy Markdown
Contributor

@blt blt commented Jun 1, 2026

Summary

This PR introduces DogStatD load generation. If you're familiar with
my work in lading you might notice this is very different. The
implementation here is responsible for giving Antithesis choices between
'compliant' dogstatsd lines and 'feral' lines which are mechanically
allowable lines but are in practice not sensible. Also of interest
control of contexts and send rates are jettisoned entirely, that's an
antithesis scheduling concern.

Metrics, events and service-checks are all present. Depending on the
antithesis shots I may need to adjust the ratios of compliant to feral
outcomes.

Change Type

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

How did you test this PR?

Antithesis shots confirmed load generation behaves like a feral animal.

References

This commit introduces DogStatD load generation. If you're familiar with
my work in lading you might notice this is very different. The
implementation here is responsible for giving Antithesis choices between
'compliant' dogstatsd lines and 'feral' lines which are _mechanically_
allowable lines but are in practice not sensible. Also of interest
control of contexts and send rates are jettisoned entirely, that's an
antithesis scheduling concern.

Metrics, events and service-checks are all present. Depending on the
antithesis shots I may need to adjust the ratios of compliant to feral
outcomes.
@dd-octo-sts dd-octo-sts Bot added the area/test All things testing: unit/integration, correctness, SMP regression, etc. label Jun 1, 2026
Copy link
Copy Markdown
Contributor Author

blt commented Jun 1, 2026

@datadog-official
Copy link
Copy Markdown

datadog-official Bot commented Jun 1, 2026

Pipelines

Fix all issues with BitsAI

⚠️ Warnings

🚦 2 Pipeline jobs failed

DataDog/saluki | check-licenses   View in Datadog   GitLab

🔧 Fix in code (Fix with Cursor). Current 'LICENSE-3rdparty.csv' is not up to date.

Semantic PR Title Check | Check For Semantic PR Title   View in Datadog   GitHub Actions

🛟 This job is unlikely to succeed on retry. Please review your pipeline configuration. No release type found in pull request title 'DogStatsD load generation'. Add a prefix to indicate the kind of release this pull request corresponds to.

Useful? React with 👍 / 👎

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

@pr-commenter
Copy link
Copy Markdown

pr-commenter Bot commented Jun 1, 2026

Binary Size Analysis (Agent Data Plane)

Baseline: 1bd1613 · Comparison: a31a487 · diff
Analysis Configuration: stripped binaries · Pass/Fail Threshold: +5%
Sizes: 37.89 MiB (baseline) vs 37.90 MiB (comparison)
Size Change: +760 B (+0.00%)

✅ Binary size difference within threshold

Changes by Module
Module File Size Symbols
anon.36eead261da73468b10600f578de22ed.87.llvm.14046994766694184360 +2.83 KiB 1
anon.0acc57ca412442189c7678857beeb25f.1.llvm.18230564023335910389 -2.83 KiB 1
anon.eba192a60e6caa742f85cd2f7b63cef6.18.llvm.10590908203511297131 -2.46 KiB 1
anon.e5f0d67f8d0d8b1c6e3888577e274890.511.llvm.6538778123177323897 +2.46 KiB 1
anon.423de405463045f5e6382613e58502c9.555.llvm.7227059468892596563 +1.59 KiB 1
anon.ed85dad8c2fdcfe5c906411ebc1601c6.1.llvm.11441704272744907195 -1.59 KiB 1
anon.0acc57ca412442189c7678857beeb25f.101.llvm.17623075813770587000 +1.32 KiB 1
anon.69220190dd54a7096abb5416a7fc5f5b.172.llvm.3001728827928409060 -1.32 KiB 1
anon.69220190dd54a7096abb5416a7fc5f5b.84.llvm.15805731423594874612 +1.17 KiB 1
anon.02b5255633f97219e3c81be4a33426c5.42.llvm.4649599560089562033 -1.17 KiB 1
anon.50abf489da332cac3fe9fcf0b1218cd2.353.llvm.436185206835468104 +1.06 KiB 1
anon.423de405463045f5e6382613e58502c9.623.llvm.2135413985037036474 -1.06 KiB 1
_RNvMs5_NtNtCsaz6eC2DG7lh_3std2io5errorNtB5_5Error4kind.llvm.12104049852236292769 +830 B 1
_RNvMs5_NtNtCsaz6eC2DG7lh_3std2io5errorNtB5_5Error4kind.llvm.15805731423594874612 +830 B 1
_RNvMs5_NtNtCsaz6eC2DG7lh_3std2io5errorNtB5_5Error4kind.llvm.3001728827928409060 -829 B 1
_RNvMs5_NtNtCsaz6eC2DG7lh_3std2io5errorNtB5_5Error4kind.llvm.4649599560089562033 -829 B 1
anon.0cbe5d1da6c19cbc1bc3d4c0ab437541.44.llvm.197401638548642842 +823 B 1
anon.f002492f45681213d5f2178507d8f8df.914.llvm.4043333310207047691 -821 B 1
anon.50abf489da332cac3fe9fcf0b1218cd2.48.llvm.9678418280774762212 -732 B 1
anon.50abf489da332cac3fe9fcf0b1218cd2.48.llvm.436185206835468104 +731 B 1
Detailed Symbol Changes
    FILE SIZE        VM SIZE    
 --------------  -------------- 
  [NEW] +3.43Ki  [NEW]    +456    core::ptr::drop_in_place<core::iter::adapters::map::Map<std::collections::hash::map::IntoIter<axum::routing::RouteId,axum::routing::Endpoint<saluki_components::destinations::dsd_stats::DogStatsDAPIHandlerState>>,axum::routing::path_router::PathRouter<saluki_components::destinations::dsd_stats::DogStatsDAPIHandlerState,_>::with_state<$LP$$RP$>::{{closure}}>>::h5a147bb683008716
  [NEW] +2.84Ki  [NEW]     +47    _<http_body_util::combinators::map_err::MapErr<B,F> as http_body::Body>::size_hint::h674725303a3ab093
  [NEW] +2.83Ki  [NEW]      +2    anon.36eead261da73468b10600f578de22ed.87.llvm.14046994766694184360
  [NEW] +2.46Ki  [NEW]     +80    anon.e5f0d67f8d0d8b1c6e3888577e274890.511.llvm.6538778123177323897
  [NEW] +2.17Ki  [NEW]    +129    core::ptr::drop_in_place<std::sync::poison::PoisonError<std::sync::poison::rwlock::RwLockWriteGuard<quick_cache::shard::CacheShard<alloc::string::String,saluki_components::sources::otlp::metrics::cache::NumberCounter,saluki_common::cache::weight::WrappedWeighter<saluki_common::cache::weight::ItemCountWeighter>,foldhash::quality::RandomState,saluki_common::cache::expiry::ExpiryCapableLifecycle<alloc::string::String>,alloc::sync::Arc<quick_cache::sync_placeholder::Placeholder<saluki_components::sources::otlp::metrics::cache::NumberCounter>>>>>>::he338aa4cd4e8609e
  [NEW] +2.17Ki  [NEW]    +315    core::ptr::drop_in_place<tokio::sync::mpsc::bounded::Permit<saluki_components::sources::dogstatsd::forwarder::ForwardPacket>>::h76efc4f68c4fbede
  [NEW] +1.59Ki  [NEW]     +97    anon.423de405463045f5e6382613e58502c9.555.llvm.7227059468892596563
  [NEW] +1.57Ki  [NEW]    +703    _<http_body_util::combinators::map_err::MapErr<B,F> as http_body::Body>::poll_frame::hb2bbfae5f62c1b09
  [NEW] +1.38Ki  [NEW]    +691    _<http_body_util::combinators::map_err::MapErr<B,F> as http_body::Body>::poll_frame::h147ce3747417d704
  [NEW] +1.32Ki  [NEW]     +88    anon.0acc57ca412442189c7678857beeb25f.101.llvm.17623075813770587000
  +0.0%    +771  [ = ]       0    [4037 Others]
  [DEL] -1.32Ki  [DEL]     -88    anon.69220190dd54a7096abb5416a7fc5f5b.172.llvm.3001728827928409060
  [DEL] -1.38Ki  [DEL]    -691    _<http_body_util::combinators::map_err::MapErr<B,F> as http_body::Body>::poll_frame::h8d3d490742ef5359
  [DEL] -1.57Ki  [DEL]    -703    _<http_body_util::combinators::map_err::MapErr<B,F> as http_body::Body>::poll_frame::h4c56918971715b8b
  [DEL] -1.59Ki  [DEL]     -97    anon.ed85dad8c2fdcfe5c906411ebc1601c6.1.llvm.11441704272744907195
  [DEL] -2.17Ki  [DEL]    -129    core::ptr::drop_in_place<std::sync::poison::PoisonError<std::sync::poison::rwlock::RwLockWriteGuard<quick_cache::shard::CacheShard<stringtheory::MetaString,core::option::Option<saluki_components::transforms::dogstatsd_mapper::CachedMapResult>,saluki_common::cache::weight::WrappedWeighter<saluki_common::cache::weight::ItemCountWeighter>,foldhash::quality::RandomState,saluki_common::cache::expiry::ExpiryCapableLifecycle<stringtheory::MetaString>,alloc::sync::Arc<quick_cache::sync_placeholder::Placeholder<core::option::Option<saluki_components::transforms::dogstatsd_mapper::CachedMapResult>>>>>>>::hb84ff946adb48f71
  [DEL] -2.18Ki  [DEL]    -315    core::ptr::drop_in_place<tokio::sync::mpsc::bounded::Permit<saluki_components::common::datadog::transaction::Transaction<saluki_common::buf::chunked::FrozenChunkedBytesBuffer>>>::h24eaa96d15a67cde
  [DEL] -2.46Ki  [DEL]     -80    anon.eba192a60e6caa742f85cd2f7b63cef6.18.llvm.10590908203511297131
  [DEL] -2.83Ki  [DEL]      -2    anon.0acc57ca412442189c7678857beeb25f.1.llvm.18230564023335910389
  [DEL] -2.84Ki  [DEL]     -47    _<http_body_util::combinators::map_err::MapErr<B,F> as http_body::Body>::size_hint::h66dcc7212f74260d
  [DEL] -3.44Ki  [DEL]    -456    core::ptr::drop_in_place<core::iter::adapters::map::Map<std::collections::hash::map::IntoIter<axum::routing::RouteId,axum::routing::Endpoint<saluki_components::sources::dogstatsd::replay::replay_control::DogStatsDReplayControl>>,axum::routing::path_router::PathRouter<saluki_components::sources::dogstatsd::replay::replay_control::DogStatsDReplayControl,_>::with_state<$LP$$RP$>::{{closure}}>>::h9e288300660bcc12
  +0.0%    +760  [ = ]       0    TOTAL

@pr-commenter
Copy link
Copy Markdown

pr-commenter Bot commented Jun 1, 2026

Regression Detector (Agent Data Plane)

Run ID: 265d0344-fbd2-42a2-822c-8e7eda897017
Baseline: 1bd16137 · Comparison: a31a487f · diff

Optimization Goals: ✅ No significant changes detected

Fine details of change detection per experiment (35)

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
dsd_uds_1mb_3k_contexts_cpu (erratic) cpu ⚪ +8.50 metrics profiles logs
otlp_ingest_logs_5mb_memory (ignored) memory ⚪ +6.74 metrics profiles logs
otlp_ingest_metrics_5mb_memory memory ⚪ +1.69 metrics profiles logs
otlp_ingest_traces_ottl_transform_5mb_cpu (erratic) cpu ⚪ +1.59 metrics profiles logs
otlp_ingest_logs_5mb_cpu (ignored) cpu ⚪ +1.38 metrics profiles logs
dsd_uds_500mb_3k_contexts_throughput throughput ⚪ -1.24 metrics profiles logs
dsd_uds_512kb_3k_contexts_memory memory ⚪ +0.47 metrics profiles logs
dsd_uds_100mb_3k_contexts_memory memory ⚪ +0.36 metrics profiles logs
quality_gates_rss_dsd_low memory ⚪ +0.12 metrics profiles logs
otlp_ingest_metrics_5mb_cpu (erratic) cpu ⚪ +0.08 metrics profiles logs
quality_gates_rss_dsd_ultraheavy memory ⚪ +0.07 metrics profiles logs
otlp_ingest_traces_ottl_transform_5mb_throughput throughput ⚪ -0.05 metrics profiles logs
dsd_uds_10mb_3k_contexts_throughput throughput ⚪ -0.01 metrics profiles logs
otlp_ingest_traces_5mb_memory memory ⚪ +0.01 metrics profiles logs
dsd_uds_100mb_3k_contexts_throughput throughput ⚪ -0.00 metrics profiles logs
dsd_uds_512kb_3k_contexts_throughput throughput ⚪ -0.00 metrics profiles logs
dsd_uds_1mb_3k_contexts_throughput throughput ⚪ +0.00 metrics profiles logs
otlp_ingest_metrics_5mb_throughput throughput ⚪ +0.01 metrics profiles logs
quality_gates_rss_dsd_heavy memory ⚪ -0.03 metrics profiles logs
otlp_ingest_traces_ottl_filtering_5mb_throughput throughput ⚪ +0.03 metrics profiles logs
otlp_ingest_logs_5mb_throughput (ignored) throughput ⚪ +0.04 metrics profiles logs
dsd_uds_1mb_3k_contexts_memory memory ⚪ -0.04 metrics profiles logs
otlp_ingest_traces_5mb_throughput throughput ⚪ +0.05 metrics profiles logs
otlp_ingest_traces_ottl_filtering_5mb_memory memory ⚪ -0.07 metrics profiles logs
quality_gates_rss_dsd_medium memory ⚪ -0.08 metrics profiles logs
quality_gates_rss_idle memory ⚪ -0.12 metrics profiles logs
otlp_ingest_traces_ottl_transform_5mb_memory memory ⚪ -0.15 metrics profiles logs
otlp_ingest_traces_5mb_cpu (erratic) cpu ⚪ -0.17 metrics profiles logs
dsd_uds_500mb_3k_contexts_memory memory ⚪ -0.30 metrics profiles logs
dsd_uds_10mb_3k_contexts_memory memory ⚪ -0.32 metrics profiles logs
dsd_uds_500mb_3k_contexts_cpu (erratic) cpu ⚪ -0.66 metrics profiles logs
otlp_ingest_traces_ottl_filtering_5mb_cpu (erratic) cpu ⚪ -0.93 metrics profiles logs
dsd_uds_100mb_3k_contexts_cpu (erratic) cpu ⚪ -1.35 metrics profiles logs
dsd_uds_10mb_3k_contexts_cpu (erratic) cpu ⚪ -4.43 metrics profiles logs
dsd_uds_512kb_3k_contexts_cpu (erratic) cpu 🟢 -9.70 metrics profiles logs
Bounds Checks: ✅ Passed (5)
experiment check replicates observed links
quality_gates_rss_dsd_heavy memory_usage 10/10 ✅ 123 MiB ≤ 140 MiB metrics profiles logs
quality_gates_rss_dsd_low memory_usage 10/10 ✅ 39.6 MiB ≤ 50 MiB metrics profiles logs
quality_gates_rss_dsd_medium memory_usage 10/10 ✅ 60.5 MiB ≤ 75 MiB metrics profiles logs
quality_gates_rss_dsd_ultraheavy memory_usage 10/10 ✅ 181 MiB ≤ 200 MiB metrics profiles logs
quality_gates_rss_idle memory_usage 10/10 ✅ 26.7 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.

Signed-off-by: Brian L. Troutwine <brian.troutwine@datadoghq.com>
@blt blt changed the title DogStatsD load generation enhancement(antithesis): DogStatsD load generation Jun 1, 2026
@blt blt marked this pull request as ready for review June 1, 2026 14:26
Copilot AI review requested due to automatic review settings June 1, 2026 14:26
@blt blt requested review from a team as code owners June 1, 2026 14:26
Copy link
Copy Markdown

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

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: a31a487f1b

ℹ️ 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".

pub(crate) fn write_segments<R: Rng + ?Sized>(
rng: &mut R, buf: &mut Vec<u8>, vibe: Vibe, compliant: &[&[u8]], aberrant: &[&[u8]], separators: &[u8],
) {
let count = Boundary::<u8>::new().sample(rng);
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 Keep clean identifiers non-empty

When vibe is Vibe::Clean, this boundary sampler can return 0, so write_words emits an empty metric name, service-check name, event title, or event text. Those packets are not well-formed in the codebase's parsers (take_while1 for metric/service names and an explicit zero-length reject for events), so a supposedly clean batch can still be dropped before reaching the intake; this makes the delivery baseline and the "fully clean batch" assertion much weaker than intended. Use a non-zero count for clean identifier/text fields and reserve zero-length fields for feral cases.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR adds an Antithesis-oriented DogStatsD workload generator to the test harness, shifting the Antithesis setup away from the prior millstone-based load driver and toward generating a mix of “clean” (compliant) and “feral” (mechanically allowable but nonsensical) DogStatsD lines (metrics/events/service-checks). It also updates the Antithesis scratchbook documentation to reflect the new workload and its current bug-reproduction reach.

Changes:

  • Add a new harness::payload::dogstatsd module that generates metric, event, and service-check lines with clean/feral “vibes”.
  • Rework parallel_driver_send_dogstatsd to send randomly sized batches of generated DogStatsD messages and update associated SDK assertions.
  • Update Antithesis deployment and scratchbook docs for the new workload driver and topology.

Reviewed changes

Copilot reviewed 17 out of 18 changed files in this pull request and generated 12 comments.

Show a summary per file
File Description
test/antithesis/scratchbook/property-catalog.md Updates catalog notes/status to reflect new driver behavior and workload reach.
test/antithesis/scratchbook/existing-assertions.md Updates assertion inventory and explains the new driver; needs minor wording alignment.
test/antithesis/scratchbook/deployment-topology.md Updates topology narrative for the new driver; contains an outdated UDS note vs actual deployment.
test/antithesis/scratchbook/bug-ledger.md Adds “workload reach” note and updates bug-hunt entry details.
test/antithesis/harness/src/rand.rs Extends randomness helpers with Probe for multiple numeric types and Boundary<T> samplers.
test/antithesis/harness/src/payload/dogstatsd/common.rs Adds shared “segment/number/tag” construction utilities and clean/feral vibe handling.
test/antithesis/harness/src/payload/dogstatsd/metrics.rs Adds feral metric line generator with randomized extensions/tags/value encodings.
test/antithesis/harness/src/payload/dogstatsd/events.rs Adds feral event generator (including skewed header lengths in feral mode).
test/antithesis/harness/src/payload/dogstatsd/service_checks.rs Adds feral service-check generator.
test/antithesis/harness/src/payload/dogstatsd.rs Adds top-level DogStatsD message selection and in-file format reference notes.
test/antithesis/harness/src/payload.rs Adds payload module root.
test/antithesis/harness/src/lib.rs Exposes the new payload module from the harness crate.
test/antithesis/harness/src/bin/parallel_driver_send_dogstatsd.rs Replaces old regime-based metric sender with batch-based clean/feral/mixed driver.
test/antithesis/harness/src/bin/first_sample_config/config.rs Changes sampled log_level values; currently introduces an unsupported level for ADP.
test/antithesis/harness/Cargo.toml Adds itoa/ryu dependencies for fast numeric formatting.
test/antithesis/deploy/Dockerfile Removes millstone from workload image build; builds/copies new test-command binaries.
test/antithesis/deploy/docker-compose.yaml Removes RUST_BACKTRACE env var; configures shared UDS volume for DogStatsD socket.
Cargo.lock Records new dependency edges for harness additions (itoa, ryu).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines 66 to +70
pub(crate) enum LogLevel {
/// Warnings and above.
Warn,
/// Errors only.
Error,
/// Critical only — the quietest level that still logs.
Critical,
pub(crate) fn write_segments<R: Rng + ?Sized>(
rng: &mut R, buf: &mut Vec<u8>, vibe: Vibe, compliant: &[&[u8]], aberrant: &[&[u8]], separators: &[u8],
) {
let count = Boundary::<u8>::new().sample(rng);
Comment on lines 60 to 65
@@ -65,12 +65,13 @@ Notes:
sidecar — see "Listener-coverage variant".)
| `test/antithesis/harness/src/bin/eventually_adp_alive.rs:62` | `assert_always!` | "ADP booted: API reachable and DogStatsD socket present" | harness binary (`eventually_`, faults-paused) | Death-liveness for `adp-stays-alive` — fails the branch when ADP self-crashed (config panic / load) but stayed down through the quiet period. |
| `lib/saluki-components/src/common/datadog/io.rs:553` | `assert_sometimes!` | "ADP forwarded a payload to the intake" (`{ domain }`) | `#[cfg(feature = "antithesis")]` | First in-SUT property assertion — good-function liveness (the full pipeline ran to a 2xx) + replay checkpoint; good-function half of `adp-keeps-delivering`, in-SUT seed of `forwarder-eventual-delivery`. |
| `test/antithesis/harness/src/bin/parallel_driver_send_dogstatsd.rs:46` | `assert_reachable!` | "workload ran a dogstatsd batch" | harness binary | Confirms the DSD driver ran a batch; details carry the attempted-line count and socket path. |
| `test/antithesis/harness/src/bin/parallel_driver_send_dogstatsd.rs:53` | `assert_sometimes!` | "workload delivered at least one dogstatsd line" (`attempted > 0`) | harness binary | Anti-vacuity anchor: a batch can sample count == 0, so "ran" does not imply "sent"; this proves a timeline sometimes actually delivers a line, else delivery checks are vacuous. |
Comment on lines 66 to +70
pub(crate) enum LogLevel {
/// Warnings and above.
Warn,
/// Errors only.
Error,
/// Critical only — the quietest level that still logs.
Critical,
| `test/antithesis/harness/src/bin/eventually_adp_alive.rs:62` | `assert_always!` | "ADP booted: API reachable and DogStatsD socket present" | harness binary (`eventually_`, faults-paused) | Death-liveness for `adp-stays-alive` — fails the branch when ADP self-crashed (config panic / load) but stayed down through the quiet period. |
| `lib/saluki-components/src/common/datadog/io.rs:553` | `assert_sometimes!` | "ADP forwarded a payload to the intake" (`{ domain }`) | `#[cfg(feature = "antithesis")]` | First in-SUT property assertion — good-function liveness (the full pipeline ran to a 2xx) + replay checkpoint; good-function half of `adp-keeps-delivering`, in-SUT seed of `forwarder-eventual-delivery`. |
| `test/antithesis/harness/src/bin/parallel_driver_send_dogstatsd.rs:46` | `assert_reachable!` | "workload ran a dogstatsd batch" | harness binary | Confirms the DSD driver ran a batch; details carry the attempted-line count and socket path. |
| `test/antithesis/harness/src/bin/parallel_driver_send_dogstatsd.rs:53` | `assert_sometimes!` | "workload delivered at least one dogstatsd line" (`attempted > 0`) | harness binary | Anti-vacuity anchor: a batch can sample count == 0, so "ran" does not imply "sent"; this proves a timeline sometimes actually delivers a line, else delivery checks are vacuous. |
Comment on lines 66 to +70
pub(crate) enum LogLevel {
/// Warnings and above.
Warn,
/// Errors only.
Error,
/// Critical only — the quietest level that still logs.
Critical,
pub(crate) fn write_segments<R: Rng + ?Sized>(
rng: &mut R, buf: &mut Vec<u8>, vibe: Vibe, compliant: &[&[u8]], aberrant: &[&[u8]], separators: &[u8],
) {
let count = Boundary::<u8>::new().sample(rng);
Comment on lines 60 to 65
@@ -65,12 +65,13 @@ Notes:
sidecar — see "Listener-coverage variant".)
| `test/antithesis/harness/src/bin/eventually_adp_alive.rs:62` | `assert_always!` | "ADP booted: API reachable and DogStatsD socket present" | harness binary (`eventually_`, faults-paused) | Death-liveness for `adp-stays-alive` — fails the branch when ADP self-crashed (config panic / load) but stayed down through the quiet period. |
| `lib/saluki-components/src/common/datadog/io.rs:553` | `assert_sometimes!` | "ADP forwarded a payload to the intake" (`{ domain }`) | `#[cfg(feature = "antithesis")]` | First in-SUT property assertion — good-function liveness (the full pipeline ran to a 2xx) + replay checkpoint; good-function half of `adp-keeps-delivering`, in-SUT seed of `forwarder-eventual-delivery`. |
| `test/antithesis/harness/src/bin/parallel_driver_send_dogstatsd.rs:46` | `assert_reachable!` | "workload ran a dogstatsd batch" | harness binary | Confirms the DSD driver ran a batch; details carry the attempted-line count and socket path. |
| `test/antithesis/harness/src/bin/parallel_driver_send_dogstatsd.rs:53` | `assert_sometimes!` | "workload delivered at least one dogstatsd line" (`attempted > 0`) | harness binary | Anti-vacuity anchor: a batch can sample count == 0, so "ran" does not imply "sent"; this proves a timeline sometimes actually delivers a line, else delivery checks are vacuous. |
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.

2 participants