Skip to content

chore(config): migrate OttlTransformConfiguration to typed config#1997

Merged
webern merged 1 commit into
m/pr6-adp-cutoverfrom
m/ottl-transform
Jul 6, 2026
Merged

chore(config): migrate OttlTransformConfiguration to typed config#1997
webern merged 1 commit into
m/pr6-adp-cutoverfrom
m/ottl-transform

Conversation

@webern

@webern webern commented Jul 5, 2026

Copy link
Copy Markdown
Contributor

Summary

Cut the OTTL transform processor over from the raw GenericConfiguration map to the typed
SalukiConfiguration model, following the pattern already applied to the sibling OTTL filter
processor.

  • OttlTransformConfiguration::from_configuration now takes the resolved
    domains::traces::OttlTransform settings and copies them directly, instead of deserializing an
    OttlTransformConfig out of GenericConfiguration. The component-local config module (its
    ErrorMode enum and OttlTransformConfig struct) is removed; the component reuses the model's
    shared OttlErrorMode.
  • The call site in run.rs reads saluki.domains.traces.ottl_transform. Since this was the last
    consumer of the raw config in add_baseline_traces_pipeline_to_blueprint, the now-unused
    GenericConfiguration parameter is dropped from that function.
  • The seed source OttlTransformConfig in saluki_only.rs is aligned with the filter's: its
    error_mode deserializes directly into OttlErrorMode (rather than a loose Option<String> fed
    through a hand-rolled parse helper) and it now rejects unknown fields, restoring the strict
    deserialization the original component had.

ottl_transform_config is absent from the vendored Datadog schema, so it is a Saluki-only key on
the seed track; there is no witnessed alias for it.

Change Type

  • Non-functional (chore, refactoring, docs)

How did you test this PR?

  • Rewrote the component tests to build from typed traces settings; all OTTL transform tests pass.
  • Added an ottl_transform_config round-trip rejection test mirroring the filter's.
  • make build-schema-overlay leaves the tree unchanged; make fmt, make check-all, make test,
    and make check-docs all pass.

AI Review

Claude Code review on behalf of webern: I found no blocking issues.

I traced ottl_transform_config through the Saluki-only source, the resolved traces model, and the component. Both knobs remain reachable, the absent-key defaults remain propagate and an empty statement list, and the component receives the same values and retains the same runtime behavior. Typing error_mode and denying unknown fields preserves the validation performed by the deleted component-local deserializer rather than weakening sanitization. The behavioral tests still cover statement parsing, execution order, all error modes, and buffer handling; the source-deserialization rejection coverage moved to the config-system layer.

Copilot also reported no findings. CI is green.

References

Cut the OTTL transform processor over from the raw GenericConfiguration
map to the resolved traces-domain settings. The component now builds from
`domains::traces::OttlTransform` (seeded from the Saluki-only
`ottl_transform_config` key) instead of deserializing `OttlTransformConfig`
itself, so its component-local config module is removed.

Aligns the `OttlTransformConfig` seed source with the sibling filter: the
error mode deserializes directly into `OttlErrorMode` and unknown fields are
rejected, replacing the loose `Option<String>` field and its hand-rolled
parse helper.
Copilot AI review requested due to automatic review settings July 5, 2026 19:48
@webern
webern requested a review from a team as a code owner July 5, 2026 19:48

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

This PR completes the typed-config cutover for the OTTL transform processor by switching it from reading raw GenericConfiguration maps to consuming the resolved SalukiConfiguration traces-domain model (matching the existing OTTL filter processor pattern).

Changes:

  • Migrates OttlTransformConfiguration::from_configuration to take domains::traces::OttlTransform (typed settings) and removes the component-local config module/types.
  • Updates the CLI traces pipeline builder to read saluki.domains.traces.ottl_transform and drops the now-unused GenericConfiguration parameter from add_baseline_traces_pipeline_to_blueprint.
  • Tightens Saluki-only seed config deserialization for ottl_transform_config (typed OttlErrorMode, deny_unknown_fields) and adds a regression test rejecting unknown fields/invalid enum values.

Reviewed changes

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

File Description
lib/agent-data-plane-config-system/src/saluki_only.rs Makes ottl_transform_config deserialization strict again (typed OttlErrorMode, deny_unknown_fields) and adds rejection tests.
bin/agent-data-plane/src/components/ottl_transform_processor/mod.rs Switches the transform processor to typed traces settings, removes raw-config parsing, and updates tests accordingly.
bin/agent-data-plane/src/components/ottl_transform_processor/config.rs Removes the now-unneeded component-local YAML config model.
bin/agent-data-plane/src/cli/run.rs Updates traces pipeline wiring to use typed config and removes an unused raw-config parameter.

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

@pr-commenter

pr-commenter Bot commented Jul 5, 2026

Copy link
Copy Markdown

Binary Size Analysis (Agent Data Plane)

Baseline: 7b98c6f · Comparison: d7955cb · diff
Analysis Configuration: stripped binaries · Pass/Fail Threshold: +5%
Sizes: 41.63 MiB (baseline) vs 41.66 MiB (comparison)
Size Change: +21.66 KiB (+0.05%)

✅ Binary size difference within threshold

Changes by Module
Module File Size Symbols
figment -674.66 KiB 360
serde_json +251.91 KiB 511
core +150.73 KiB 9305
datadog_agent_config::generated::datadog_configuration +148.44 KiB 45
resource_accounting::groups::Tracked +121.43 KiB 35
tracing -116.90 KiB 98
serde -72.26 KiB 67
tokio +65.92 KiB 3323
agent_data_plane_config_system::saluki_env_overlay::PathRecorder +65.24 KiB 22
prost +44.11 KiB 273
serde_with -43.54 KiB 26
saluki_components::common::datadog -41.03 KiB 529
saluki_components::sources::dogstatsd -40.31 KiB 368
tonic -39.21 KiB 356
agent_data_plane_config_system::translators::datadog_translator +31.38 KiB 25
http_body_util +30.56 KiB 149
agent_data_plane_config::SalukiConfiguration +28.62 KiB 1
hyper_util +28.62 KiB 40
axum +28.46 KiB 310
otlp_protos::otlp_include::opentelemetry -25.66 KiB 144
Detailed Symbol Changes
    FILE SIZE        VM SIZE    
 --------------  -------------- 
  [NEW] +88.1Ki  [NEW] +87.8Ki    _<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] +55.0Ki  [NEW] +54.9Ki    saluki_components::common::datadog::io::run_endpoint_io_loop::_{{closure}}::h619cfc6f7a2c29a2
  [NEW] +52.8Ki  [NEW] +52.7Ki    agent_data_plane::cli::run::handle_run_command::_{{closure}}::h329f79117c30c586
  [NEW] +40.9Ki  [NEW] +40.7Ki    _<saluki_components::forwarders::otlp::OtlpForwarder as saluki_core::components::forwarders::Forwarder>::run::_{{closure}}::h12001b40cfdbe9ad
  [NEW] +36.6Ki  [NEW] +36.4Ki    _<saluki_components::transforms::apm_stats::ApmStats as saluki_core::components::transforms::Transform>::run::_{{closure}}::hcfbaff7c8f04ca3a
  [NEW] +32.5Ki  [NEW] +32.3Ki    _<saluki_components::transforms::aggregate::Aggregate as saluki_core::components::transforms::Transform>::run::_{{closure}}::ha1b37f98738ba368
  [NEW] +32.1Ki  [NEW] +31.9Ki    saluki_components::sources::otlp::metrics::translator::OtlpMetricsTranslator::translate_metrics::h6f16bec49aa3e135
  [NEW] +31.9Ki  [NEW] +31.8Ki    agent_data_plane::internal::env::workload::RemoteAgentWorkloadProvider::from_configuration::_{{closure}}::hc1ab1506e0ba4151
  [NEW] +30.3Ki  [NEW] +30.1Ki    agent_data_plane::cli::dogstatsd::handle_dogstatsd_command::_{{closure}}::hd2948b2b886d3024
  [NEW] +28.6Ki  [NEW] +28.5Ki    _<agent_data_plane_config::SalukiConfiguration as core::clone::Clone>::clone::h8de0a5256ebf7df6
  [NEW] +26.6Ki  [NEW] +26.5Ki    agent_data_plane::cli::run::create_topology::_{{closure}}::h7b42595e5eb142f8
  [NEW] +26.5Ki  [NEW] +26.3Ki    saluki_components::sources::dogstatsd::drive_stream::_{{closure}}::h16dece6451b89a07
  [DEL] -26.6Ki  [DEL] -26.4Ki    _<saluki_components::sources::dogstatsd::DogStatsDConfiguration as saluki_core::components::sources::builder::SourceBuilder>::build::_{{closure}}::h2c2a33d551977c6d
  [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.1%  -176Ki  -2.2%  -264Ki    [33566 Others]
  +0.1% +21.7Ki  -0.2% -67.0Ki    TOTAL

@pr-commenter

pr-commenter Bot commented Jul 5, 2026

Copy link
Copy Markdown

Regression Detector (Agent Data Plane)

Run ID: ab46c175-64c3-4cb7-88c4-e36806a0187f
Baseline: 7b98c6f1 · Comparison: d7955cba · diff

Optimization Goals: ✅ No significant changes detected

Fine details of change detection per experiment (5)

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.57 metrics profiles logs
quality_gates_rss_idle memory ⚪ +0.56 metrics profiles logs
quality_gates_rss_dsd_ultraheavy memory ⚪ +0.52 metrics profiles logs
quality_gates_rss_dsd_medium memory ⚪ +0.41 metrics profiles logs
quality_gates_rss_dsd_heavy memory ⚪ +0.06 metrics profiles logs
Bounds Checks: ✅ Passed (5)
experiment check replicates observed links
quality_gates_rss_dsd_heavy memory_usage 10/10 ✅ 138 MiB ≤ 140 MiB metrics profiles logs
quality_gates_rss_dsd_low memory_usage 10/10 ✅ 43.4 MiB ≤ 50 MiB metrics profiles logs
quality_gates_rss_dsd_medium memory_usage 10/10 ✅ 64.9 MiB ≤ 75 MiB metrics profiles logs
quality_gates_rss_dsd_ultraheavy memory_usage 10/10 ✅ 191 MiB ≤ 200 MiB metrics profiles logs
quality_gates_rss_idle memory_usage 10/10 ✅ 29.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.

@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 review on behalf of webern: I found no blocking issues.

I traced ottl_transform_config through the Saluki-only source, the resolved traces model, and the component. Both knobs remain reachable, the absent-key defaults remain propagate and an empty statement list, and the component receives the same values and retains the same runtime behavior. Typing error_mode and denying unknown fields preserves the validation performed by the deleted component-local deserializer rather than weakening sanitization. The behavioral tests still cover statement parsing, execution order, all error modes, and buffer handling; the source-deserialization rejection coverage moved to the config-system layer.

Copilot also reported no findings. CI is green.

@webern
webern merged commit a428731 into m/pr6-adp-cutover Jul 6, 2026
86 checks passed
@webern
webern deleted the m/ottl-transform branch July 6, 2026 09:54
webern added a commit that referenced this pull request Jul 8, 2026
)

## Summary

Cut the OTTL transform processor over from the raw
`GenericConfiguration` map to the typed
`SalukiConfiguration` model, following the pattern already applied to
the sibling OTTL filter
processor.

- `OttlTransformConfiguration::from_configuration` now takes the
resolved
`domains::traces::OttlTransform` settings and copies them directly,
instead of deserializing an
`OttlTransformConfig` out of `GenericConfiguration`. The component-local
config module (its
`ErrorMode` enum and `OttlTransformConfig` struct) is removed; the
component reuses the model's
  shared `OttlErrorMode`.
- The call site in `run.rs` reads
`saluki.domains.traces.ottl_transform`. Since this was the last
consumer of the raw config in
`add_baseline_traces_pipeline_to_blueprint`, the now-unused
  `GenericConfiguration` parameter is dropped from that function.
- The seed source `OttlTransformConfig` in `saluki_only.rs` is aligned
with the filter's: its
`error_mode` deserializes directly into `OttlErrorMode` (rather than a
loose `Option<String>` fed
through a hand-rolled parse helper) and it now rejects unknown fields,
restoring the strict
  deserialization the original component had.

`ottl_transform_config` is absent from the vendored Datadog schema, so
it is a Saluki-only key on
the seed track; there is no witnessed alias for it.

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

## How did you test this PR?

- Rewrote the component tests to build from typed traces settings; all
OTTL transform tests pass.
- Added an `ottl_transform_config` round-trip rejection test mirroring
the filter's.
- `make build-schema-overlay` leaves the tree unchanged; `make fmt`,
`make check-all`, `make test`,
  and `make check-docs` all pass.

## References

- Progresses #1788
- Merges into #1987
webern added a commit that referenced this pull request Jul 9, 2026
)

Cut the OTTL transform processor over from the raw
`GenericConfiguration` map to the typed
`SalukiConfiguration` model, following the pattern already applied to
the sibling OTTL filter
processor.

- `OttlTransformConfiguration::from_configuration` now takes the
resolved
`domains::traces::OttlTransform` settings and copies them directly,
instead of deserializing an
`OttlTransformConfig` out of `GenericConfiguration`. The component-local
config module (its
`ErrorMode` enum and `OttlTransformConfig` struct) is removed; the
component reuses the model's
  shared `OttlErrorMode`.
- The call site in `run.rs` reads
`saluki.domains.traces.ottl_transform`. Since this was the last
consumer of the raw config in
`add_baseline_traces_pipeline_to_blueprint`, the now-unused
  `GenericConfiguration` parameter is dropped from that function.
- The seed source `OttlTransformConfig` in `saluki_only.rs` is aligned
with the filter's: its
`error_mode` deserializes directly into `OttlErrorMode` (rather than a
loose `Option<String>` fed
through a hand-rolled parse helper) and it now rejects unknown fields,
restoring the strict
  deserialization the original component had.

`ottl_transform_config` is absent from the vendored Datadog schema, so
it is a Saluki-only key on
the seed track; there is no witnessed alias for it.

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

- Rewrote the component tests to build from typed traces settings; all
OTTL transform tests pass.
- Added an `ottl_transform_config` round-trip rejection test mirroring
the filter's.
- `make build-schema-overlay` leaves the tree unchanged; `make fmt`,
`make check-all`, `make test`,
  and `make check-docs` all pass.

- Progresses #1788
- Merges into #1987
webern added a commit that referenced this pull request Jul 9, 2026
)

Cut the OTTL transform processor over from the raw
`GenericConfiguration` map to the typed
`SalukiConfiguration` model, following the pattern already applied to
the sibling OTTL filter
processor.

- `OttlTransformConfiguration::from_configuration` now takes the
resolved
`domains::traces::OttlTransform` settings and copies them directly,
instead of deserializing an
`OttlTransformConfig` out of `GenericConfiguration`. The component-local
config module (its
`ErrorMode` enum and `OttlTransformConfig` struct) is removed; the
component reuses the model's
  shared `OttlErrorMode`.
- The call site in `run.rs` reads
`saluki.domains.traces.ottl_transform`. Since this was the last
consumer of the raw config in
`add_baseline_traces_pipeline_to_blueprint`, the now-unused
  `GenericConfiguration` parameter is dropped from that function.
- The seed source `OttlTransformConfig` in `saluki_only.rs` is aligned
with the filter's: its
`error_mode` deserializes directly into `OttlErrorMode` (rather than a
loose `Option<String>` fed
through a hand-rolled parse helper) and it now rejects unknown fields,
restoring the strict
  deserialization the original component had.

`ottl_transform_config` is absent from the vendored Datadog schema, so
it is a Saluki-only key on
the seed track; there is no witnessed alias for it.

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

- Rewrote the component tests to build from typed traces settings; all
OTTL transform tests pass.
- Added an `ottl_transform_config` round-trip rejection test mirroring
the filter's.
- `make build-schema-overlay` leaves the tree unchanged; `make fmt`,
`make check-all`, `make test`,
  and `make check-docs` all pass.

- Progresses #1788
- Merges into #1987
webern added a commit that referenced this pull request Jul 9, 2026
)

Cut the OTTL transform processor over from the raw
`GenericConfiguration` map to the typed
`SalukiConfiguration` model, following the pattern already applied to
the sibling OTTL filter
processor.

- `OttlTransformConfiguration::from_configuration` now takes the
resolved
`domains::traces::OttlTransform` settings and copies them directly,
instead of deserializing an
`OttlTransformConfig` out of `GenericConfiguration`. The component-local
config module (its
`ErrorMode` enum and `OttlTransformConfig` struct) is removed; the
component reuses the model's
  shared `OttlErrorMode`.
- The call site in `run.rs` reads
`saluki.domains.traces.ottl_transform`. Since this was the last
consumer of the raw config in
`add_baseline_traces_pipeline_to_blueprint`, the now-unused
  `GenericConfiguration` parameter is dropped from that function.
- The seed source `OttlTransformConfig` in `saluki_only.rs` is aligned
with the filter's: its
`error_mode` deserializes directly into `OttlErrorMode` (rather than a
loose `Option<String>` fed
through a hand-rolled parse helper) and it now rejects unknown fields,
restoring the strict
  deserialization the original component had.

`ottl_transform_config` is absent from the vendored Datadog schema, so
it is a Saluki-only key on
the seed track; there is no witnessed alias for it.

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

- Rewrote the component tests to build from typed traces settings; all
OTTL transform tests pass.
- Added an `ottl_transform_config` round-trip rejection test mirroring
the filter's.
- `make build-schema-overlay` leaves the tree unchanged; `make fmt`,
`make check-all`, `make test`,
  and `make check-docs` all pass.

- Progresses #1788
- Merges into #1987
webern added a commit that referenced this pull request Jul 9, 2026
)

Cut the OTTL transform processor over from the raw
`GenericConfiguration` map to the typed
`SalukiConfiguration` model, following the pattern already applied to
the sibling OTTL filter
processor.

- `OttlTransformConfiguration::from_configuration` now takes the
resolved
`domains::traces::OttlTransform` settings and copies them directly,
instead of deserializing an
`OttlTransformConfig` out of `GenericConfiguration`. The component-local
config module (its
`ErrorMode` enum and `OttlTransformConfig` struct) is removed; the
component reuses the model's
  shared `OttlErrorMode`.
- The call site in `run.rs` reads
`saluki.domains.traces.ottl_transform`. Since this was the last
consumer of the raw config in
`add_baseline_traces_pipeline_to_blueprint`, the now-unused
  `GenericConfiguration` parameter is dropped from that function.
- The seed source `OttlTransformConfig` in `saluki_only.rs` is aligned
with the filter's: its
`error_mode` deserializes directly into `OttlErrorMode` (rather than a
loose `Option<String>` fed
through a hand-rolled parse helper) and it now rejects unknown fields,
restoring the strict
  deserialization the original component had.

`ottl_transform_config` is absent from the vendored Datadog schema, so
it is a Saluki-only key on
the seed track; there is no witnessed alias for it.

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

- Rewrote the component tests to build from typed traces settings; all
OTTL transform tests pass.
- Added an `ottl_transform_config` round-trip rejection test mirroring
the filter's.
- `make build-schema-overlay` leaves the tree unchanged; `make fmt`,
`make check-all`, `make test`,
  and `make check-docs` all pass.

- Progresses #1788
- Merges into #1987
webern added a commit that referenced this pull request Jul 9, 2026
)

Cut the OTTL transform processor over from the raw
`GenericConfiguration` map to the typed
`SalukiConfiguration` model, following the pattern already applied to
the sibling OTTL filter
processor.

- `OttlTransformConfiguration::from_configuration` now takes the
resolved
`domains::traces::OttlTransform` settings and copies them directly,
instead of deserializing an
`OttlTransformConfig` out of `GenericConfiguration`. The component-local
config module (its
`ErrorMode` enum and `OttlTransformConfig` struct) is removed; the
component reuses the model's
  shared `OttlErrorMode`.
- The call site in `run.rs` reads
`saluki.domains.traces.ottl_transform`. Since this was the last
consumer of the raw config in
`add_baseline_traces_pipeline_to_blueprint`, the now-unused
  `GenericConfiguration` parameter is dropped from that function.
- The seed source `OttlTransformConfig` in `saluki_only.rs` is aligned
with the filter's: its
`error_mode` deserializes directly into `OttlErrorMode` (rather than a
loose `Option<String>` fed
through a hand-rolled parse helper) and it now rejects unknown fields,
restoring the strict
  deserialization the original component had.

`ottl_transform_config` is absent from the vendored Datadog schema, so
it is a Saluki-only key on
the seed track; there is no witnessed alias for it.

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

- Rewrote the component tests to build from typed traces settings; all
OTTL transform tests pass.
- Added an `ottl_transform_config` round-trip rejection test mirroring
the filter's.
- `make build-schema-overlay` leaves the tree unchanged; `make fmt`,
`make check-all`, `make test`,
  and `make check-docs` all pass.

- Progresses #1788
- Merges into #1987
webern added a commit that referenced this pull request Jul 10, 2026
)

Cut the OTTL transform processor over from the raw
`GenericConfiguration` map to the typed
`SalukiConfiguration` model, following the pattern already applied to
the sibling OTTL filter
processor.

- `OttlTransformConfiguration::from_configuration` now takes the
resolved
`domains::traces::OttlTransform` settings and copies them directly,
instead of deserializing an
`OttlTransformConfig` out of `GenericConfiguration`. The component-local
config module (its
`ErrorMode` enum and `OttlTransformConfig` struct) is removed; the
component reuses the model's
  shared `OttlErrorMode`.
- The call site in `run.rs` reads
`saluki.domains.traces.ottl_transform`. Since this was the last
consumer of the raw config in
`add_baseline_traces_pipeline_to_blueprint`, the now-unused
  `GenericConfiguration` parameter is dropped from that function.
- The seed source `OttlTransformConfig` in `saluki_only.rs` is aligned
with the filter's: its
`error_mode` deserializes directly into `OttlErrorMode` (rather than a
loose `Option<String>` fed
through a hand-rolled parse helper) and it now rejects unknown fields,
restoring the strict
  deserialization the original component had.

`ottl_transform_config` is absent from the vendored Datadog schema, so
it is a Saluki-only key on
the seed track; there is no witnessed alias for it.

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

- Rewrote the component tests to build from typed traces settings; all
OTTL transform tests pass.
- Added an `ottl_transform_config` round-trip rejection test mirroring
the filter's.
- `make build-schema-overlay` leaves the tree unchanged; `make fmt`,
`make check-all`, `make test`,
  and `make check-docs` all pass.

- Progresses #1788
- Merges into #1987
webern added a commit that referenced this pull request Jul 13, 2026
)

Cut the OTTL transform processor over from the raw
`GenericConfiguration` map to the typed
`SalukiConfiguration` model, following the pattern already applied to
the sibling OTTL filter
processor.

- `OttlTransformConfiguration::from_configuration` now takes the
resolved
`domains::traces::OttlTransform` settings and copies them directly,
instead of deserializing an
`OttlTransformConfig` out of `GenericConfiguration`. The component-local
config module (its
`ErrorMode` enum and `OttlTransformConfig` struct) is removed; the
component reuses the model's
  shared `OttlErrorMode`.
- The call site in `run.rs` reads
`saluki.domains.traces.ottl_transform`. Since this was the last
consumer of the raw config in
`add_baseline_traces_pipeline_to_blueprint`, the now-unused
  `GenericConfiguration` parameter is dropped from that function.
- The seed source `OttlTransformConfig` in `saluki_only.rs` is aligned
with the filter's: its
`error_mode` deserializes directly into `OttlErrorMode` (rather than a
loose `Option<String>` fed
through a hand-rolled parse helper) and it now rejects unknown fields,
restoring the strict
  deserialization the original component had.

`ottl_transform_config` is absent from the vendored Datadog schema, so
it is a Saluki-only key on
the seed track; there is no witnessed alias for it.

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

- Rewrote the component tests to build from typed traces settings; all
OTTL transform tests pass.
- Added an `ottl_transform_config` round-trip rejection test mirroring
the filter's.
- `make build-schema-overlay` leaves the tree unchanged; `make fmt`,
`make check-all`, `make test`,
  and `make check-docs` all pass.

- Progresses #1788
- Merges into #1987
webern added a commit that referenced this pull request Jul 13, 2026
)

Cut the OTTL transform processor over from the raw
`GenericConfiguration` map to the typed
`SalukiConfiguration` model, following the pattern already applied to
the sibling OTTL filter
processor.

- `OttlTransformConfiguration::from_configuration` now takes the
resolved
`domains::traces::OttlTransform` settings and copies them directly,
instead of deserializing an
`OttlTransformConfig` out of `GenericConfiguration`. The component-local
config module (its
`ErrorMode` enum and `OttlTransformConfig` struct) is removed; the
component reuses the model's
  shared `OttlErrorMode`.
- The call site in `run.rs` reads
`saluki.domains.traces.ottl_transform`. Since this was the last
consumer of the raw config in
`add_baseline_traces_pipeline_to_blueprint`, the now-unused
  `GenericConfiguration` parameter is dropped from that function.
- The seed source `OttlTransformConfig` in `saluki_only.rs` is aligned
with the filter's: its
`error_mode` deserializes directly into `OttlErrorMode` (rather than a
loose `Option<String>` fed
through a hand-rolled parse helper) and it now rejects unknown fields,
restoring the strict
  deserialization the original component had.

`ottl_transform_config` is absent from the vendored Datadog schema, so
it is a Saluki-only key on
the seed track; there is no witnessed alias for it.

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

- Rewrote the component tests to build from typed traces settings; all
OTTL transform tests pass.
- Added an `ottl_transform_config` round-trip rejection test mirroring
the filter's.
- `make build-schema-overlay` leaves the tree unchanged; `make fmt`,
`make check-all`, `make test`,
  and `make check-docs` all pass.

- Progresses #1788
- Merges into #1987
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants