Skip to content

chore(config): migrate datadog trace encoder to typed configuration - #2187

Draft
webern wants to merge 1 commit into
mainfrom
m/confra-dtcfg
Draft

chore(config): migrate datadog trace encoder to typed configuration#2187
webern wants to merge 1 commit into
mainfrom
m/confra-dtcfg

Conversation

@webern

@webern webern commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Human Summary

TODO: human writes here

AI Summary

Migrate the Datadog trace encoder to typed configuration.

  • Construct the encoder from typed shared configuration instead of GenericConfiguration.
  • Move the Agent zstd compressor setting into the shared compression model.
  • Add the ADP-specific zstd override as a typed Saluki-only setting while preserving precedence and defaults.
  • Move the trace encoder's flush timeout into shared metrics encoding configuration.
  • Remove raw deserialization and legacy smoke-test registration from the encoder.

Change Type

  • Non-functional (chore, refactoring, docs)

How did you test this PR?

  • make build-schema-overlay
  • make fmt
  • cargo check --workspace --tests
  • cargo clippy -p saluki-components -p agent-data-plane-config-system -p agent-data-plane -p agent-data-plane-config --all-targets
  • cargo nextest run -p saluki-components -p agent-data-plane-config-system -p agent-data-plane-config
  • Confirmed generated schema output has no drift

References

Construct the Datadog trace encoder from typed configuration slices
instead of reading GenericConfiguration.

- Move the Agent zstd compressor level (serializer_zstd_compressor_level)
  into shared.endpoints.compression, and add the ADP-specific override
  (data_plane.serializer_zstd_compressor_level) as a Saluki-only key that
  seeds shared.endpoints.compression.data_plane_zstd_compressor_level.
  Absence stays meaningful, so the override is Option-typed with no
  value-layer default; the effective-level resolution is unchanged.
- Add a shared MetricsEncoding carrying the Saluki-only flush_timeout_secs
  key (default 2s), shared by the metrics encoders and the trace encoder.
- Remove the encoder's raw deserialization, Datadog key names, and
  config-layer defaults; drop its config smoke-test registration while
  keeping used_by for legacy codegen.
- Update the run.rs construction call site and config registries.
@dd-octo-sts dd-octo-sts Bot added area/components Sources, transforms, and destinations. encoder/datadog-traces Datadog Traces encoder. labels Jul 22, 2026
@pr-commenter

pr-commenter Bot commented Jul 22, 2026

Copy link
Copy Markdown

Binary Size Analysis (Agent Data Plane)

Baseline: 0f99ce3 · Comparison: 9f282e2 · diff
Analysis Configuration: stripped binaries · Pass/Fail Threshold: +5%
Sizes: 40.79 MiB (baseline) vs 41.07 MiB (comparison)
Size Change: +288.55 KiB (+0.69%)

✅ Binary size difference within threshold

Changes by Module
Module File Size Symbols
figment +266.16 KiB 292
saluki_components::common::datadog -80.69 KiB 109
tonic_prost +52.08 KiB 23
serde +37.98 KiB 51
otlp_protos::otlp_include::opentelemetry -34.87 KiB 108
tokio +34.47 KiB 863
prost -32.13 KiB 132
h2 -25.79 KiB 142
saluki_common::resource_tracking::groups -24.81 KiB 6
saluki_common::task::instrument +24.78 KiB 30
axum -24.71 KiB 110
saluki_components::transforms::dogstatsd_mapper -18.21 KiB 9
anon.b079aeaef5f76a51ab3e4b0646475f7b.211.llvm.4409727639327715872 +16.92 KiB 1
anon.4f47395eaac7e6a86c9111625e37e6d6.395.llvm.1637700629175368008 -16.91 KiB 1
serde_with +16.34 KiB 27
anyhow +13.93 KiB 207
core +13.37 KiB 2643
hyper +12.87 KiB 80
anon.ef0ce62d2d1c502dc6eb837b21a31be4.335.llvm.11570969892712929373 +12.29 KiB 1
anon.4f47395eaac7e6a86c9111625e37e6d6.672.llvm.1637700629175368008 -12.20 KiB 1
Detailed Symbol Changes
    FILE SIZE        VM SIZE    
 --------------  -------------- 
  +2.9%  +329Ki  +2.8%  +252Ki    [13854 Others]
  [NEW] +33.1Ki  [NEW] +33.0Ki    agent_data_plane::internal::env::workload::RemoteAgentWorkloadProvider::from_configuration::_{{closure}}::h438e15b1c6f48c53
  [NEW] +22.1Ki  [NEW] +22.0Ki    saluki_components::transforms::trace_obfuscation::TraceObfuscation::obfuscate_span::hfb6846f70c2f8055
  [NEW] +16.9Ki  [NEW]     +76    anon.b079aeaef5f76a51ab3e4b0646475f7b.211.llvm.4409727639327715872
  [NEW] +12.9Ki  [NEW] +12.7Ki    _<figment::value::de::ConfiguredValueDe<I> as serde_core::de::Deserializer>::deserialize_any::h5b0bc0cf25ffe876
  [NEW] +12.3Ki  [NEW]     +81    anon.ef0ce62d2d1c502dc6eb837b21a31be4.335.llvm.11570969892712929373
  [NEW] +12.1Ki  [NEW] +12.0Ki    _<core::pin::Pin<P> as core::future::future::Future>::poll::h2202cf3842ddfd9e
  [NEW] +11.7Ki  [NEW] +11.5Ki    _<figment::value::magic::RelativePathBuf as figment::value::magic::Magic>::deserialize_from::h05a885b8092cb95f
  [NEW] +11.4Ki  [NEW] +11.3Ki    _<figment::value::magic::Tagged<T> as figment::value::magic::Magic>::deserialize_from::hcf2897bad2dd274a
 +47e2% +10.8Ki +80e2% +10.8Ki    std::sys::backtrace::__rust_begin_short_backtrace::h636265569ecef8fc
  [DEL] -11.5Ki  [DEL] -11.4Ki    h2::server::Connection<T,B>::poll_closed::h92b70f56726577b1
  [DEL] -11.6Ki  [DEL] -11.6Ki    h2::server::Connection<T,B>::poll_closed::hc9c179a40ea7c55d
  [DEL] -12.1Ki  [DEL] -12.0Ki    saluki_components::sources::dogstatsd::replay::writer::run_capture_loop::he083f64fbd1fc69a
  [DEL] -12.2Ki  [DEL]     -81    anon.4f47395eaac7e6a86c9111625e37e6d6.672.llvm.1637700629175368008
  [DEL] -12.4Ki  [DEL] -12.3Ki    h2::server::Connection<T,B>::poll_closed::h29dd8a9319b0a688
  [DEL] -14.2Ki  [DEL] -14.0Ki    saluki_components::common::datadog::apm::_::_<impl serde_core::de::Deserialize for saluki_components::common::datadog::apm::ApmConfiguration>::deserialize::h8279d5536d30f1e2
  [DEL] -15.6Ki  [DEL] -15.3Ki    saluki_components::common::datadog::config::_::_<impl serde_core::de::Deserialize for saluki_components::common::datadog::config::ForwarderConfiguration>::deserialize::h8491640142ecc530
  [DEL] -16.9Ki  [DEL]     -76    anon.4f47395eaac7e6a86c9111625e37e6d6.395.llvm.1637700629175368008
  [DEL] -20.2Ki  [DEL] -20.1Ki    agent_data_plane::internal::env::workload::build_collector::_{{closure}}::h2f3a47ff8d1c568c
  [DEL] -21.3Ki  [DEL] -21.2Ki    agent_data_plane::internal::env::ADPEnvironmentProvider::from_configuration::_{{closure}}::h2d1251391c27a303
  [DEL] -36.2Ki  [DEL] -35.9Ki    _<saluki_components::common::datadog::obfuscation::_::<impl serde_core::de::Deserialize for saluki_components::common::datadog::obfuscation::ObfuscationConfig>::deserialize::__Visitor as serde_core::de::Visitor>::visit_map::h04547875805b5e90
  +0.7%  +288Ki  +0.6%  +211Ki    TOTAL

@pr-commenter

pr-commenter Bot commented Jul 22, 2026

Copy link
Copy Markdown

Regression Detector (Agent Data Plane)

Run ID: 866e7a66-1d38-4255-a554-4b498b9bfea9
Baseline: 0f99ce37 · Comparison: 9f282e26 · 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_idle memory ⚪ +0.59 metrics profiles logs
quality_gates_rss_dsd_medium memory ⚪ -0.12 metrics profiles logs
quality_gates_rss_dsd_low memory ⚪ -0.17 metrics profiles logs
Bounds Checks: ✅ Passed (3)
experiment check replicates observed links
quality_gates_rss_dsd_low memory_usage 10/10 ✅ 45.7 MiB ≤ 50 MiB metrics profiles logs
quality_gates_rss_dsd_medium memory_usage 10/10 ✅ 67.8 MiB ≤ 75 MiB metrics profiles logs
quality_gates_rss_idle memory_usage 10/10 ✅ 31.3 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.

webern commented Jul 23, 2026

Copy link
Copy Markdown
Contributor Author

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

Labels

area/components Sources, transforms, and destinations. encoder/datadog-traces Datadog Traces encoder.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant