Skip to content

chore(config): migrate OTLP components to typed config#1989

Merged
webern merged 2 commits into
m/pr5-cutoverfrom
m/otlp-conf
Jul 5, 2026
Merged

chore(config): migrate OTLP components to typed config#1989
webern merged 2 commits into
m/pr5-cutoverfrom
m/otlp-conf

Conversation

@webern

@webern webern commented Jul 5, 2026

Copy link
Copy Markdown
Contributor

Human Summary

There's some weird stuff going on here with preserving "absence" in an attempt to preserve exact behavioral parity, but I think it's OK.

AI Summary

Cuts the OTLP components over from the raw GenericConfiguration map to the typed
SalukiConfiguration model, following the PR #1979 pattern: OtlpConfig (shared receiver
config), the OTLP source, decoder, forwarder, and relay.

Each component now builds from typed model slices (domains.otlp, domains.traces.otlp)
instead of deserializing the raw config:

  • Source / relay / decoder / forwarder: from_configuration takes borrowed model slices;
    the call site in run.rs reads them from the config system. Component structs carry no serde
    and no defaults.
  • Seeded OTLP knobs (context sizing, HTTP receiver transport, trace interner size,
    top-level-by-span-kind) are converted to the required-with-default doctrine: non-optional in
    SalukiOnly with the default defined once as a shared const/fn in agent-data-plane-config
    and referenced by both the model Default and the SalukiOnly serde default. The two byte-size
    interner keys are typed ByteSize so they accept both a bare integer and a suffixed string.
  • OtlpTracesTranslator now takes the two native booleans it actually reads instead of the
    whole raw TracesConfig. TracesConfig is kept only for the not-yet-migrated Datadog trace
    encoder.
  • The per-component config smoke tests are retired (coverage now lives in the translator and
    construction tests).

Behavior notes

Because the OTLP receiver keys are witnessed against the vendored Datadog schema, their defaults
now come from that schema rather than Saluki's former hardcoded values. When a key is left unset:

  • gRPC/HTTP receiver endpoints default to localhost:4317 / localhost:4318 (previously
    0.0.0.0:...), matching the Datadog Agent.
  • otlp_config.logs.enabled defaults to false (previously true), matching the Datadog Agent.
  • otlp_config.receiver.protocols.grpc.max_recv_msg_size_mib of 0 now maps to grpc-go's built-in
    4 MiB limit, matching the Agent and the schema documentation (previously 0 produced a 0-byte
    limit).

Deployments that set these keys explicitly (including the OTLP correctness cases, which pin the
gRPC endpoint to 0.0.0.0:4317) are unaffected.

Change Type

  • Non-functional (chore, refactoring, docs)

How did you test this PR?

  • make build-schema-overlay && make fmt (no generated drift), make check-all, make check-docs.
  • Unit tests for agent-data-plane-config, agent-data-plane-config-system, saluki-components,
    and agent-data-plane, including new SalukiOnly transport/default tests (both byte-size input
    forms) and per-component construction tests.
  • Statically reviewed the OTLP correctness cases: all send over gRPC on the explicitly configured
    0.0.0.0:4317, so the receiver default changes above do not affect them.

References

Cut OtlpConfig, the OTLP source, decoder, forwarder, and relay over from the
raw GenericConfiguration map to the typed SalukiConfiguration model.

- Source/relay/decoder/forwarder build from `domains.otlp` and
  `domains.traces.otlp` slices; smoke tests retired in favor of construction
  and translator tests.
- Convert the seeded OTLP knobs (context sizing, HTTP transport, trace interner
  size, top-level-by-span-kind) to the Rule 2 doctrine: non-optional in
  SalukiOnly with shared defaults defined once in agent-data-plane-config.
- OtlpTracesTranslator now takes the two native bools it reads instead of the
  raw TracesConfig; TracesConfig is kept only for the not-yet-migrated Datadog
  trace encoder.
- gRPC max_recv_msg_size_mib of 0 now maps to grpc-go's 4 MiB default, matching
  the Datadog Agent and the schema documentation.
@webern webern requested a review from a team as a code owner July 5, 2026 15:02
Copilot AI review requested due to automatic review settings July 5, 2026 15:02
@dd-octo-sts dd-octo-sts Bot added area/components Sources, transforms, and destinations. otlp/metrics OTLP metrics (OTeL, open-telemetry) otlp/traces OTLP traces (OTeL, open-telemetry) otlp/logs OTLP logs (OTeL, open-telemetry) source/otlp OTLP source. labels Jul 5, 2026

Copilot AI 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.

Pull request overview

Migrates OTLP pipeline components (source/relay/decoder/forwarder and trace translator inputs) from deserializing the raw GenericConfiguration map to consuming the resolved typed SalukiConfiguration domain models, aligning OTLP with the typed-config construction pattern introduced in prior config-migration work.

Changes:

  • Refactors OTLP component configuration constructors to accept typed model slices (domains.otlp / domains.traces.otlp) and removes component-local serde/defaults and config smoke tests.
  • Centralizes/normalizes OTLP sizing/transport defaults in the typed config domains and seeding layer (including ByteSize parsing for “bare int” vs “suffixed string” inputs).
  • Adds a shared helper for translating max_recv_msg_size_mib into bytes (with “0 means grpc-go default” semantics) and wires it into OTLP source/relay.

Reviewed changes

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

Show a summary per file
File Description
lib/saluki-components/src/sources/otlp/resolver.rs Switches context resolver sizing to use typed OTLP config fields.
lib/saluki-components/src/sources/otlp/mod.rs Rebuilds OTLP source config from typed domains; updates translator/server wiring; replaces smoke tests with construction/mapping tests.
lib/saluki-components/src/relays/otlp/mod.rs Reworks OTLP relay config to parse endpoints/max message size from typed OTLP domain.
lib/saluki-components/src/forwarders/otlp/mod.rs Updates forwarder config to read trace OTLP settings from typed traces domain.
lib/saluki-components/src/decoders/otlp/mod.rs Updates decoder config to read trace OTLP settings from typed traces domain; removes smoke tests.
lib/saluki-components/src/common/otlp/traces/translator.rs Adjusts trace translator constructor to take the two relevant booleans directly instead of a raw config struct.
lib/saluki-components/src/common/otlp/mod.rs Adds shared grpc_max_recv_msg_size_bytes helper implementing the “0 => grpc default” rule.
lib/saluki-components/src/common/otlp/config.rs Removes shared raw-map OTLP receiver config structs, keeping only the legacy traces config needed by the Datadog trace encoder for now.
lib/agent-data-plane-config/src/domains/traces.rs Defines typed defaults and a concrete Default for OtlpTraces aligned with seeded vs schema-owned keys.
lib/agent-data-plane-config/src/domains/otlp.rs Adds typed defaults and concrete Default impls for OTLP contexts/HTTP transport consistent with seeded keys.
lib/agent-data-plane-config-system/src/saluki_only.rs Makes seeded OTLP knobs non-optional with serde defaults; supports ByteSize for interner-size keys; updates seeding logic and tests.
bin/agent-data-plane/src/cli/run.rs Updates topology assembly to pull OTLP component configs from the resolved typed config model via ConfigurationSystem.

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

Comment on lines +21 to 22
let context_string_interner_size = NonZeroUsize::new(config.context_string_interner_bytes as usize)
.ok_or_else(|| generic_error!("context_string_interner_size must be greater than 0"))?;
Comment on lines +156 to +157
let traces_interner_size = std::num::NonZeroUsize::new(self.traces_string_interner_bytes as usize)
.ok_or_else(|| generic_error!("otlp_config.traces.string_interner_size must be greater than 0"))?;
Comment on lines +58 to +59
let traces_interner_size = std::num::NonZeroUsize::new(self.traces_string_interner_bytes as usize)
.ok_or_else(|| generic_error!("otlp_config.traces.string_interner_size must be greater than 0"))?;
Comment on lines +62 to +69
pub fn grpc_max_recv_msg_size_bytes(max_recv_msg_size_mib: u64) -> usize {
let mib = if max_recv_msg_size_mib == 0 {
OTLP_GRPC_DEFAULT_MAX_RECV_MSG_SIZE_MIB
} else {
max_recv_msg_size_mib
};
(mib * 1024 * 1024) as usize
}
@pr-commenter

pr-commenter Bot commented Jul 5, 2026

Copy link
Copy Markdown

Binary Size Analysis (Agent Data Plane)

Baseline: 7b98c6f · Comparison: 80675f2 · diff
Analysis Configuration: stripped binaries · Pass/Fail Threshold: +5%
Sizes: 41.63 MiB (baseline) vs 42.28 MiB (comparison)
Size Change: +662.54 KiB (+1.55%)

✅ Binary size difference within threshold

Changes by Module
Module File Size Symbols
figment -350.01 KiB 392
serde_json +253.19 KiB 514
datadog_agent_config::generated::datadog_configuration +143.46 KiB 44
core +124.48 KiB 9285
agent_data_plane_config_system::saluki_env_overlay::PathRecorder +68.62 KiB 25
alloc +56.90 KiB 1479
serde_core +51.56 KiB 920
[sections] +49.88 KiB 8
saluki_components::common::datadog +49.47 KiB 563
agent_data_plane_config_system::translators::datadog_translator +38.94 KiB 20
hyper +38.61 KiB 267
tonic -33.26 KiB 369
tokio +30.46 KiB 3089
serde -29.93 KiB 85
axum +26.64 KiB 335
saluki_components::sources::dogstatsd -23.12 KiB 370
saluki_components::sources::otlp +19.06 KiB 226
anon.d8d271c50487587c9b6310627b2cf9fb.97.llvm.12711318533235703819 +18.12 KiB 1
http_body_util +17.77 KiB 152
anon.3c6daed7130ac65f12c358dccf72eacf.5.llvm.12496690623383365869 -17.15 KiB 1
Detailed Symbol Changes
    FILE SIZE        VM SIZE    
 --------------  -------------- 
  +2.7%  +421Ki  +2.2%  +266Ki    [33960 Others]
  [NEW] +84.9Ki  [NEW] +84.6Ki    _<datadog_agent_config::generated::datadog_configuration::_::<impl serde_core::de::Deserialize for datadog_agent_config::generated::datadog_configuration::DatadogConfiguration>::deserialize::__Visitor as serde_core::de::Visitor>::visit_map::h59abc0a47db21533
  [NEW] +56.8Ki  [NEW] +56.6Ki    saluki_components::common::datadog::io::run_endpoint_io_loop::_{{closure}}::h3ef2a484186f0bb8
  [NEW] +44.4Ki  [NEW] +44.3Ki    agent_data_plane::cli::run::handle_run_command::_{{closure}}::he5819430e26508ec
  [NEW] +41.2Ki  [NEW] +41.0Ki    _<saluki_components::forwarders::otlp::OtlpForwarder as saluki_core::components::forwarders::Forwarder>::run::_{{closure}}::h3d7ef516f362b9a8
  [NEW] +36.4Ki  [NEW] +36.1Ki    _<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::h5dc7893c0984844c
  [NEW] +35.3Ki  [NEW] +35.2Ki    saluki_components::sources::otlp::metrics::translator::OtlpMetricsTranslator::translate_metrics::hd269a5b16c8f1266
  [NEW] +32.1Ki  [NEW] +31.9Ki    _<saluki_components::transforms::aggregate::Aggregate as saluki_core::components::transforms::Transform>::run::_{{closure}}::h6809d072204e0804
  [NEW] +30.1Ki  [NEW] +29.9Ki    _<figment::value::de::ConfiguredValueDe<I> as serde_core::de::Deserializer>::deserialize_struct::h0ee4d0f278f8b18b
  [NEW] +28.6Ki  [NEW] +28.5Ki    agent_data_plane::cli::dogstatsd::handle_dogstatsd_command::_{{closure}}::hd22ba2289c2b0af8
  [NEW] +27.6Ki  [NEW] +27.4Ki    _<figment::value::de::ConfiguredValueDe<I> as serde_core::de::Deserializer>::deserialize_struct::hd5ea8acab6a637b4
  [NEW] +27.0Ki  [NEW] +26.8Ki    _<saluki_components::sources::dogstatsd::DogStatsDConfiguration as saluki_core::components::sources::builder::SourceBuilder>::build::_{{closure}}::h6b9140c89e43d005
  [NEW] +26.9Ki  [NEW] +26.7Ki    saluki_components::sources::dogstatsd::drive_stream::_{{closure}}::h16acca5cc1c6ba60
  [NEW] +26.7Ki  [NEW] +26.4Ki    _<saluki_components::sources::dogstatsd::_::<impl serde_core::de::Deserialize for saluki_components::sources::dogstatsd::DogStatsDConfiguration>::deserialize::__Visitor as serde_core::de::Visitor>::visit_map::hba6844531adf2ec6
  [DEL] -27.2Ki  [DEL] -26.9Ki    _<saluki_components::sources::dogstatsd::_::<impl serde_core::de::Deserialize for saluki_components::sources::dogstatsd::DogStatsDConfiguration>::deserialize::__Visitor as serde_core::de::Visitor>::visit_map::hfc578ba92a99992a
  [DEL] -28.6Ki  [DEL] -28.5Ki    saluki_components::sources::otlp::metrics::translator::OtlpMetricsTranslator::translate_metrics::h1e8351a6f731e9df
  [DEL] -28.6Ki  [DEL] -28.5Ki    agent_data_plane::cli::dogstatsd::handle_dogstatsd_command::_{{closure}}::h84db3f7ad161eab2
  [DEL] -32.6Ki  [DEL] -32.4Ki    _<saluki_components::transforms::aggregate::Aggregate as saluki_core::components::transforms::Transform>::run::_{{closure}}::h72e4b09fd816d94f
  [DEL] -38.7Ki  [DEL] -38.5Ki    _<saluki_components::forwarders::otlp::OtlpForwarder as saluki_core::components::forwarders::Forwarder>::run::_{{closure}}::h3cd6ee67f0471508
  [DEL] -44.7Ki  [DEL] -44.6Ki    agent_data_plane::cli::run::handle_run_command::_{{closure}}::h83501a7881036c5f
  [DEL] -56.8Ki  [DEL] -56.6Ki    saluki_components::common::datadog::io::run_endpoint_io_loop::_{{closure}}::h54fbb73bb30184e6
  +1.6%  +662Ki  +1.5%  +506Ki    TOTAL

@pr-commenter

pr-commenter Bot commented Jul 5, 2026

Copy link
Copy Markdown

Regression Detector (Agent Data Plane)

Run ID: 403f2d7d-ddf4-4c29-9e55-1fe35c0ac772
Baseline: 7b98c6f1 · Comparison: 37442c54 · 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 ⚪ +2.29 metrics profiles logs
quality_gates_rss_dsd_low memory ⚪ +1.76 metrics profiles logs
quality_gates_rss_dsd_medium memory ⚪ +1.08 metrics profiles logs
Bounds Checks: ✅ Passed (3)
experiment check replicates observed links
quality_gates_rss_dsd_low memory_usage 10/10 ✅ 43.8 MiB ≤ 50 MiB metrics profiles logs
quality_gates_rss_dsd_medium memory_usage 10/10 ✅ 65.5 MiB ≤ 75 MiB metrics profiles logs
quality_gates_rss_idle memory_usage 10/10 ✅ 29.6 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 webern left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Claude Code operating on behalf of webern. I found two default-value regressions in the typed cutover that should be fixed before merging. Both are reachable with an otherwise empty OTLP configuration and change the externally observable native OTLP pipeline behavior.

pub fn from_configuration(otlp: &OtlpDomain, traces_otlp: &OtlpTraces) -> Result<Self, GenericError> {
Ok(Self {
metrics_enabled: otlp.receiver.metrics_enabled,
logs_enabled: otlp.receiver.logs_enabled,

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

P1: This changes the default for OTLP logs from enabled to disabled. Before this cutover, common::otlp::config::LogsConfig used default_logs_enabled() -> true; the resolved Datadog model's OtlpConfigLogs.enabled defaults to false, and this constructor now consumes that value. With no explicit otlp_config.logs.enabled, the native source will therefore stop accepting/dispatching OTLP logs. Please preserve the old effective default in the typed configuration/translation and add an empty-config regression assertion.

metrics_enabled: otlp.receiver.metrics_enabled,
logs_enabled: otlp.receiver.logs_enabled,
traces_enabled: traces_otlp.enabled,
grpc_endpoint: otlp.receiver.grpc.endpoint.clone(),

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

P1: The default listener addresses regress from 0.0.0.0:4317 (gRPC) and 0.0.0.0:4318 (HTTP) in the old common::otlp::config structs to the generated Datadog schema defaults of localhost:4317 and localhost:4318. Since this constructor now consumes the resolved model, an otherwise empty config binds only loopback and remote OTLP clients can no longer connect. Please preserve the previous effective defaults in the typed config/translation (for both endpoints) and add an empty-config regression assertion.

@webern webern left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Claude Code operating on behalf of webern. I found two default-value regressions in the typed cutover that should be fixed before merging. Both are reachable with an otherwise empty OTLP configuration and change the externally observable native OTLP pipeline behavior.

pub fn from_configuration(otlp: &OtlpDomain, traces_otlp: &OtlpTraces) -> Result<Self, GenericError> {
Ok(Self {
metrics_enabled: otlp.receiver.metrics_enabled,
logs_enabled: otlp.receiver.logs_enabled,

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

P1: This changes the default for OTLP logs from enabled to disabled. Before this cutover, common::otlp::config::LogsConfig used default_logs_enabled() -> true; the resolved Datadog model's OtlpConfigLogs.enabled defaults to false, and this constructor now consumes that value. With no explicit otlp_config.logs.enabled, the native source will therefore stop accepting/dispatching OTLP logs. Please preserve the old effective default in the typed configuration/translation and add an empty-config regression assertion.

metrics_enabled: otlp.receiver.metrics_enabled,
logs_enabled: otlp.receiver.logs_enabled,
traces_enabled: traces_otlp.enabled,
grpc_endpoint: otlp.receiver.grpc.endpoint.clone(),

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

P1: The default listener addresses regress from 0.0.0.0:4317 (gRPC) and 0.0.0.0:4318 (HTTP) in the old common::otlp::config structs to the generated Datadog schema defaults of localhost:4317 and localhost:4318. Since this constructor now consumes the resolved model, an otherwise empty config binds only loopback and remote OTLP clients can no longer connect. Please preserve the previous effective defaults in the typed config/translation (for both endpoints) and add an empty-config regression assertion.

…over

The OTLP receiver keys are witnessed against the vendored Datadog schema,
whose defaults (localhost:4317/4318, logs disabled) diverge from ADP's
historical effective defaults (0.0.0.0:4317/4318, logs enabled). After the
typed cutover the components consumed the resolved model directly, so an empty
config regressed to the Agent defaults: the native OTLP source stopped
accepting logs and both native and proxy modes bound only loopback.

Represent ADP's divergent default at the config boundary instead of as a
component-local fallback:

- Add `saluki_overrides_default` to the overlay model. When set, the config
  generator omits the schema `default` from the pruned leaf so typify emits an
  absence-aware `Option<T>` (the classifier still reads the real schema default
  from the schema map, so it is unaffected).
- Flag `otlp_config.logs.enabled`, `otlp_config.receiver.protocols.grpc.endpoint`,
  and `...http.endpoint` in the overlay and regenerate.
- The witness now hands these keys as `Option`; the translator applies the value
  only when present, leaving the typed model's `Default` (ADP's effective
  default) in place when the key is absent. An explicit value — including
  `logs.enabled: false` or an endpoint equal to the Agent default — still wins,
  and the env-var forms keep working.
- Set the OTLP receiver model defaults to ADP's values via shared const/fn.

Adds regression tests that translate an empty/raw config into the resolved
typed model (empty -> logs enabled, 0.0.0.0:4317, 0.0.0.0:4318; explicit
false/custom endpoints preserved; env var honored). The 0 => 4 MiB gRPC
receive-size behavior is unchanged.
@webern webern merged commit a062953 into m/pr5-cutover Jul 5, 2026
79 of 81 checks passed
@webern webern deleted the m/otlp-conf branch July 5, 2026 16:40
webern added a commit that referenced this pull request Jul 5, 2026
The OTLP and APM/trace cutovers removed all consumers of common/otlp/config.rs, but squash-merging the spike PRs left the module declared. Remove it to fix the resulting dead-code errors from the PR-5 merge fallout.

Merge fallout from #1989 and #1991.
webern added a commit that referenced this pull request Jul 8, 2026
There's some weird stuff going on here with preserving "absence" in an
attempt to preserve exact behavioral parity, but I think it's OK.

Cuts the OTLP components over from the raw `GenericConfiguration` map to
the typed
`SalukiConfiguration` model, following the PR #1979 pattern:
`OtlpConfig` (shared receiver
config), the OTLP source, decoder, forwarder, and relay.

Each component now builds from typed model slices (`domains.otlp`,
`domains.traces.otlp`)
instead of deserializing the raw config:

- **Source / relay / decoder / forwarder**: `from_configuration` takes
borrowed model slices;
the call site in `run.rs` reads them from the config system. Component
structs carry no serde
  and no defaults.
- **Seeded OTLP knobs** (context sizing, HTTP receiver transport, trace
interner size,
top-level-by-span-kind) are converted to the required-with-default
doctrine: non-optional in
`SalukiOnly` with the default defined once as a shared `const`/`fn` in
`agent-data-plane-config`
and referenced by both the model `Default` and the `SalukiOnly` serde
default. The two byte-size
interner keys are typed `ByteSize` so they accept both a bare integer
and a suffixed string.
- **`OtlpTracesTranslator`** now takes the two native booleans it
actually reads instead of the
whole raw `TracesConfig`. `TracesConfig` is kept only for the
not-yet-migrated Datadog trace
  encoder.
- The per-component config smoke tests are retired (coverage now lives
in the translator and
  construction tests).

Because the OTLP receiver keys are witnessed against the vendored
Datadog schema, their defaults
now come from that schema rather than Saluki's former hardcoded values.
When a key is left unset:

- gRPC/HTTP receiver endpoints default to `localhost:4317` /
`localhost:4318` (previously
  `0.0.0.0:...`), matching the Datadog Agent.
- `otlp_config.logs.enabled` defaults to `false` (previously `true`),
matching the Datadog Agent.
- `otlp_config.receiver.protocols.grpc.max_recv_msg_size_mib` of `0` now
maps to grpc-go's built-in
4 MiB limit, matching the Agent and the schema documentation (previously
`0` produced a 0-byte
  limit).

Deployments that set these keys explicitly (including the OTLP
correctness cases, which pin the
gRPC endpoint to `0.0.0.0:4317`) are unaffected.

- [x] Non-functional (chore, refactoring, docs)

- `make build-schema-overlay && make fmt` (no generated drift), `make
check-all`, `make check-docs`.
- Unit tests for `agent-data-plane-config`,
`agent-data-plane-config-system`, `saluki-components`,
and `agent-data-plane`, including new `SalukiOnly` transport/default
tests (both byte-size input
  forms) and per-component construction tests.
- Statically reviewed the OTLP correctness cases: all send over gRPC on
the explicitly configured
`0.0.0.0:4317`, so the receiver default changes above do not affect
them.

- Progresses #1788
- Merges into `m/pr5-cutover`
webern added a commit that referenced this pull request Jul 8, 2026
The OTLP and APM/trace cutovers removed all consumers of common/otlp/config.rs, but squash-merging the spike PRs left the module declared. Remove it to fix the resulting dead-code errors from the PR-5 merge fallout.

Merge fallout from #1989 and #1991.
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. otlp/logs OTLP logs (OTeL, open-telemetry) otlp/metrics OTLP metrics (OTeL, open-telemetry) otlp/traces OTLP traces (OTeL, open-telemetry) source/otlp OTLP source.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants