Build the Remote Configuration client during startup and pass its
subscriptions to the trace sampler, both OTLP ingestion paths and APM
stats.
Enable products only in connected mode with a local trace pipeline,
remote_configuration.enabled and the product switch. Translate the three
Remote Configuration keys from the Agent schema. Sampling defaults on
and semantic configuration defaults off. With no enabled product, do not
connect or start a worker.
Use the configuration stream client name for the Remote Configuration
identity. Connection or subscription setup failures prevent startup.
Disabled products retain static sampler settings and the embedded
registry.
Run the client worker under a remote-config supervisor with five
restarts per 60 seconds. Make that supervisor a temporary child of root
so exhausting its restart budget stops Remote Configuration without
stopping ADP. Consumers retain their last accepted configuration.
Keep the client log target in the first-party allowlist. Add tests for
product gating, configuration translation, the no-connection path,
client naming and restart exhaustion, plus integration cases for
disabled products and a core Agent that refuses Remote Configuration.
Document the supported keys and add a release note.
Human Summary
The final PR in the remote configuration stack. This wires it all together end enables it in ADP's runtime including the configuration values that turn these on and off. If no products are requested, or we are in standalone mode, the remote connection is not created. But if remote configurations are enabled, the subscriptions are created. Either way the respective providers are handed down into the topologies in run.rs.
AI Summary
This PR connects the RC client (#2713) to the trace consumers added in #2718–#2720. Those PRs provide a registry reader and decoders for the
APM_SEMANTIC_CORE_DDandAPM_SAMPLINGproducts, but their subscriptions are not created by ADP startup. Here startup connects to the core Agent, creates the RC client and enabled product subscriptions, passes their handles into the topology, and runs the RC worker. This is the point at which production components can receive remote semantic mappings and sampling settings.ADP subscribes only in connected mode with a local trace pipeline and
remote_configuration.enabledon. Each product has its own switch:remote_configuration.apm_sampling.enableddefaults on;remote_configuration.apm_semantics.enableddefaults off. If neither product is enabled, ADP makes no RC connection. Without a semantic subscription, OTLP translation and APM stats use embedded mappings; without a sampling subscription, the trace sampler uses its configured settings.The OTLP source and decoder and APM stats receive clones of one semantic-registry provider; the trace sampler receives its sampling subscription. The RC worker publishes accepted snapshots, and the components read them at their input-buffer boundaries. There is no semantic-registry applier task. The worker runs under a
remote-configchild supervisor with up to five restarts per 60 seconds. If it exhausts that budget, ADP continues with the last accepted settings. A connection failure during startup still fails startup. RC client logs are enabled in ADP's first-party log allowlist.Tests cover product gating, avoiding an unused connection, supervisor exhaustion, and configuration-key translation. Live configuration delivery from the core Agent through both consumers has not been tested end to end.
Change Type
How did you test this PR?
make fmt,cargo check --workspace,cargo check --workspace --tests,make check-docs,make check-clippyat the stack tip.saluki-componentstests: 549 passed at the stack tip.agent-data-planeRC and logging tests: 20 passed;make check-release-notes.References