Repository navigation
Conversation
Binary Size Analysis (Agent Data Plane)Baseline: 216e499 · Comparison: b286fb2 · diff ✅ Binary size difference within thresholdChanges by Module
Detailed Symbol Changes |
Regression Detector (Agent Data Plane)Run ID: Optimization Goals: ✅ No significant changes detectedFine details of change detection per experiment (5)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 ( |
There was a problem hiding this comment.
More details
The translator snapshots the live registry per ResourceSpans batch, while APM stats refresh peer-tag keys per event buffer; the completed static review found no concrete regression in these replacement boundaries.
🤖 Bits Code Review · Commit 028e9d9 · @DataDog review to ask questions
028e9d9 to
3a398d6
Compare
There was a problem hiding this comment.
An Unimplemented response can leave previously published remote configuration active indefinitely after the Agent disables Remote Configuration.
🤖 Bits Code Review · Commit 3a398d6 · @DataDog review to ask questions
Findings that could not be posted inline
lib/datadog-agent/remote-config/src/worker.rs:152
Withdraw assignments when Remote Configuration is disabled
After configurations have been published, an Unimplemented response—such as when Remote Configuration is disabled at runtime—only changes the retry schedule. The repository retains its files and subscribers continue using the last snapshot indefinitely instead of receiving an empty assignment, leaving disabled configuration active.
Was this helpful? React 👍 or 👎
🤖 Bits Code Review · @DataDog review to ask questions · Open Bits AI session
|
53d27cb to
dc703fe
Compare
Replace direct reads of the global semantic registry with a SemanticRegistryProvider passed through component builders. Each provider reads the last accepted subscription snapshot and falls back to the embedded registry until an update arrives. The default provider holds an inert subscription. The OTLP translator pins one registry per ResourceSpans. APM stats reads one per event buffer and rebuilds peer tag keys when the registry fingerprint changes. Components select their own snapshots without a background applier. Parse remote registries permissively, skipping unsupported concepts and fallback entries while keeping supported mappings. Keep embedded parsing strict. Return parse errors without payload contents, and report skipped entries to the caller. Use a fingerprint of the payload bytes to detect changes. Keep metadata.content_hash as a label because changed mappings can carry the same declared hash. Add tests for parsing, embedded fallback, independent subscriptions, pinned snapshots, translation and peer tag refresh through the component builders.
Clarify embedded-only operation when Remote Configuration is disabled, initial fallback before an accepted update, and stable batch snapshots. Explain registry parsing and peer tag refreshes for unfamiliar readers. Limit changes to comment blocks already added or changed by this PR.
There was a problem hiding this comment.
Human Summary
Adds a
SemanticRegistryProviderto provide either the embedded or live semantic registry. This PR doesn't actually wire up the provider to the remote configuration client yet, so it would always return embedded. In the next PR we wire it up to return the registry updates.#2719 adds the semantic RC decoder and subscription method; #2724 connects that subscription during ADP startup.
AI Summary
A span's HTTP status may appear as
http.response.status_codeorhttp.status_code. The semantic registry maps concepts like HTTP status code to ordered attribute-name fallbacks, expected types, and conditions. OTLP trace translation uses these mappings to read and normalize spans; APM stats uses the registry's peer-attribute names to group stats by the service or resource a span calls. The embeddedmappings.jsonprovides the default registry. Remote Configuration can supply a complete replacement, as in the Agent’s semantic registry.This PR gives those consumers a
SemanticRegistryProvider. It follows Saluki's pattern of passing providers through component builders: the OTLP source, OTLP decoder, and APM stats builder pass a handle to the translator or stats concentrator instead of having either consumer find a process-wide registry. The handle wraps an existing Remote ConfigurationSubscription, not a separate registry store or background task. The RC client publishes accepted snapshots to the subscription; provider clones see the same publications. With RC off (an inert subscription), or before any snapshot is accepted,snapshot()returns the embedded registry. A rejected update leaves the last accepted registry in place.Arc<Registry>perResourceSpansand passes&Registrythrough the span lookups. An update arriving mid-batch takes effect on a later batch, without a subscription read per span.metadata.content_hashlabel.This PR makes the consumers ready for a subscribed provider; decoding
APM_SEMANTIC_CORE_DDand wiring the subscription into ADP follow separately. Lookups that still use literal attribute keys, such as env and container ID, are unchanged.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.References