feat(config): add dynamic typed-config router for prefix filter#1919
feat(config): add dynamic typed-config router for prefix filter#1919webern wants to merge 4 commits into
Conversation
|
Warning This pull request is not mergeable via GitHub because a downstack PR is open. Once all requirements are satisfied, merge this PR as a stack on Graphite.
This stack of pull requests is managed by Graphite. Learn more about stacking. |
|
Add the source-agnostic PrefixFilterConfig leaf type in saluki-component-config and embed it in the DogStatsD domain group. Fill the six Datadog witness methods that were no-ops and add translation tests.
Introduce ArcSwap<SalukiConfiguration> in ConfigurationSystem so the dynamic router can atomically swap retranslated configs. Add DynamicConfigHandles with a ScopedConfig<PrefixFilterConfig> handle that wakes on accepted runtime updates.
Rename DogStatsDPrefixFilterConfiguration to DogStatsDPrefixFilterBuilder. Replace the GenericConfiguration raw-key watchers with a single ScopedConfig<PrefixFilterConfig> handle. Wire through add_dsd_pipeline_to_blueprint using system.dynamic_handles().prefix_filter.
Panoramic test that exercises the full dynamic typed-config pipeline: Core Agent config set -> GenericConfiguration -> router retranslation -> /config/internal serves the updated prefix_filter slice.
Regression Detector (Agent Data Plane)Run ID: Optimization Goals: ✅ No significant changes detectedFine details of change detection per experiment (35)Experiments configured
Bounds Checks: ✅ Passed (5)
ExplanationA 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 ( |

Human Summary
This migrates a second configuration struct,
DogStatsDPrefixFilterConfigurationto the typed configuration system. This one is dynamic and serves as a forcing function to get typed dynamic config updates working.AI Summary
Adds
PrefixFilterConfigas a source-agnostic native struct insaluki-component-configandimplements a dynamic config router in
agent-data-plane-config-systemthat subscribes to raw-mapupdate events, re-translates the full Datadog config, atomically swaps the current
SalukiConfigurationviaArcSwap, and publishes changed slices throughDynamicConfig<T>watchhandles.
Migrates the DogStatsD prefix filter component from raw-key
watch_for_updates()watchers +GenericConfigurationto a singleDynamicConfig<PrefixFilterConfig>handle. The 4-armselect!loop (one per watched key) becomes a single
changed()arm that rebuilds theEffectiveFilterlistfrom a typed snapshot.
Fills the 6 no-op witness
consume_*methods for the prefix filter keys so translation populatesPrefixFilterConfigfields.Change Type
How did you test this PR?
recovery, fixed mode, ArcSwap visibility)
_blacklistalias)DynamicConfig::fixed()andDynamicConfig::live()metric_filterlistvia control plane, verify on/config/internalmake check-all(clippy, Vale, unused-deps)References