Harden Agentless Feature Flags EVP delivery - #12477
Draft
leoromanovsky wants to merge 2 commits into
Draft
Conversation
Add capability-gated local discovery, safe sticky direct fallback, shared route state, send-once semantics, and bounded lifecycle handling for Java Feature Flags telemetry. Environment: Datadog workspace
Contributor
|
🎯 Code Coverage (details) 🔗 Commit SHA: e20a9d7 | Docs | View more details | Give us feedback! |
Contributor
🟢 Java Benchmark SLOs — All performance SLOs passed
PR vs. master results
Commit: Load and DaCapo benchmarks can be triggered manually in the GitLab pipeline. Results will appear in the Benchmarking Platform UI after completion. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Motivation
We are shipping an agentless, CDN-delivered Feature Flags configuration mode to make customer deployments simpler. Configuration polling is only half of that product path: the exposures and flag-evaluation telemetry produced by the SDK also needs a reliable network path out of the process.
Java therefore needs to auto-discover a compatible local Agent or serverless proxy and fall back to the canonical direct EVP intake when no safe local route exists. That fallback must not duplicate a batch after an ambiguous network failure, leak the API key to a local process, or change the historical Remote Config/Agent-only transport.
This incorporates and supersedes the identity-only #12200 change in the cohesive Java transport required by the cross-language Agentless EVP contract. Tracks FFLSDK-187 and preserves the FFL-3016 attribution goal.
Changes
DD-EVP-ORIGIN: dd-trace-javaandDD-EVP-ORIGIN-VERSION: TracerVersion.TRACER_VERSIONon both local and direct Feature Flags EVP requests./infoto advertise forwarding support for both SDK identity headers./info, trace probes, and EVP requests.https://event-platform-intake.<site>/api/v2/{event}with redirects and generic HTTP retries disabled.ConnectException. Other local failures switch only future batches when direct intake is available.Decisions
/evp_proxy/v2without/infodiscovery or direct credentials; a later flush uses that same fixed route after a failure.X-Datadog-EVP-Subdomainremains local-only. SDK identity is present on both routes.Validation
Base SHA:
3110972ccf744f304a7cf59973e240f9ccd1a071Candidate SHA:
e20a9d77c333ddb0c0444835f23fafba70952373All commands passed locally:
The final affected-module verification completed successfully with 1,112 Gradle tasks. The Java 8 JaCoCo verification also passes the repository's 90% changed-class coverage gate.
Added wire/unit coverage for:
Remote CI snapshot for exact candidate head
e20a9d77c333ddb0c0444835f23fafba70952373:DDCI Statusanddd-gitlab/default-pipelineare aggregate failures, anddevflow/mergegateremains pending downstream of review/status.build_tests: [:smokeTest, smoke, -Xms256M -Xmx1024M]and dependentcheck_smoke 1/4: CI Visibility classifies both as retriableplatform_errordependency failures. The internal Maven repository returned HTTP 503 while resolving metadata forcom.datadoghq:dd-trace-api.test_inst: [17, 7/8]: CI Visibility classifies the Java heap-space exhaustion as a retriableplatform_errorinfrastructure failure.muzzle: [7/8]: the unchanged Robolectric instrumentation reports missingorg.robolectric.versioning.AndroidVersionsclasses. The identical shard failure is present on multiple unrelated Java branches in the same seven-day window, so this is shared repository CI breakage rather than an EVP transport regression.No Feature Flags or changed transport test is failing in CI. The exact-candidate
spring-bootsystem-test artifact passed direct delivery3/3, serverless-init delivery2/2, and activation/manifest checks37/37in DataDog/system-tests#7702.