[Feature Flags] Add agentless EVP fallback transport - #9235
leoromanovsky wants to merge 4 commits into
Conversation
BenchmarksBenchmark execution time: 2026-09-19 04:08:56 Comparing candidate commit 7eba078 in PR branch Found 0 performance improvements and 11 performance regressions! Performance is the same for 61 metrics, 0 unstable metrics, 72 known flaky benchmarks, 54 flaky benchmarks without significant changes.
|
Execution-Time Benchmarks Report ⏱️Execution-time results for samples comparing This PR (9235) and master. ✅ No regressions detected |
Serialize the shared test request collector so concurrent sends cannot lose an observed request.\n\nEnvironment: Datadog workspace
Keep the lazy exposure API and idempotent activation lifecycle from master while injecting shared discovery into the EVP transport. Cover activation, subscription cleanup, and source disposal.\n\nValidation: 658 feature flag and discovery tests pass on net10.0; scoped whitespace validation passes.\n\nEnvironment: Datadog workspace
Reason for change / Motivation
We are shipping an Agentless, CDN-delivered Feature Flags configuration mode to simplify customer deployments. The core telemetry produced by the SDK still needs a safe network path off the process: prefer an available Agent or serverless proxy, then fall back to Datadog's direct EVP intake when Agentless credentials are available.
Without this change, .NET can receive Agentless configuration but exposure events still use the historical Agent-only EVP client and are lost when no Agent or
serverless-initis present. This implements the .NET transport portion of FFLSDK-189.Summary of changes / Changes
/infoconfirms that the Agent forwards bothDD-EVP-ORIGINidentity headers.dd-trace-dotnetand the tracer version) on both routes.DD_SITEnormalization between Agentless configuration and direct event delivery and disables automatic redirects for credential-bearing direct requests.404/405or definitive pre-send failures. Ambiguous failures and403/429/5xxresponses are never replayed; future batches switch to direct when credentials exist, otherwise the route enters bounded unavailable recovery.Implementation details / Decisions
/infoloop. Recovery after a failed route permits one concurrent post-cooldown route probe; a discovery callback can restore the route sooner.masterand has no unmerged PR ancestry.Test coverage / Validation
Merged master
773007d736d6eda017b333b9d61aa5ebef6fb73f; exact candidate7eba07853048a9d2e61f506051dca6984287c3e1.dotnet test tracer/test/Datadog.Trace.Tests/Datadog.Trace.Tests.csproj -f net10.0 --filter 'FullyQualifiedName~FeatureFlags|FullyQualifiedName~Agent.DiscoveryServiceTests' --verbosity minimal— 658 passed, 0 failed, 0 skipped.dotnet format whitespace tracer/test/Datadog.Trace.Tests/Datadog.Trace.Tests.csproj --no-restore --verify-no-changes --include tracer/src/Datadog.Trace/FeatureFlags/FeatureFlagsModule.cs tracer/src/Datadog.Trace/TracerManagerFactory.cs tracer/test/Datadog.Trace.Tests/FeatureFlags/FeatureFlagsModuleTests.cs --verbosity minimal— passed.git diff --check— passed. The new merge commit is GitHub verified:verified=true,reason=valid.End-to-end gate
Earlier exact-artifact runs failed before transport was exercised: the old candidate did not start Agentless UFC polling because #9044 was missing. That foundation is now merged; the former external blocker is resolved.
Neither direct nor serverless-init system tests have been rerun on this combined candidate. Rebuild this exact SHA and validate both routes next; passing unit tests is not backend-intake proof. Broader framework builds and current CI are not claimed from older heads.
No
system-testsor dogfooding files are changed by this PR.