Repository navigation
Add dd-openfeature SDK exposure and flag evaluation pipelines - #12842
Draft
PerfectSlayer wants to merge 1 commit into
Draft
PerfectSlayer wants to merge 1 commit into
PerfectSlayer wants to merge 1 commit into
Conversation
This was referenced Oct 13, 2026
PerfectSlayer
added this pull request to stack #12847
October 13, 2026 07:19
This comment has been minimized.
This comment has been minimized.
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. |
PerfectSlayer
force-pushed
the
bbujon/ffe-sdk-events
branch
from
October 13, 2026 09:03
da91b3b to
61ffabe
Compare
PerfectSlayer
force-pushed
the
bbujon/ffe-sdk-events
branch
from
October 13, 2026 09:26
61ffabe to
f9f9a24
Compare
PerfectSlayer
force-pushed
the
bbujon/ffe-sdk-events
branch
from
October 13, 2026 10:06
f9f9a24 to
bef5136
Compare
PerfectSlayer
force-pushed
the
bbujon/ffe-sdk-events
branch
from
October 13, 2026 10:27
bef5136 to
45e13e9
Compare
PerfectSlayer
force-pushed
the
bbujon/ffe-sdk-events
branch
from
October 13, 2026 10:58
45e13e9 to
5db55c4
Compare
PerfectSlayer
force-pushed
the
bbujon/ffe-sdk-events
branch
from
October 13, 2026 13:49
5db55c4 to
440d918
Compare
PerfectSlayer
force-pushed
the
bbujon/ffe-sdk-events
branch
from
October 14, 2026 05:32
440d918 to
de1c51b
Compare
PerfectSlayer
force-pushed
the
bbujon/ffe-sdk-events
branch
from
October 14, 2026 06:02
de1c51b to
1bd785a
Compare
PerfectSlayer
force-pushed
the
bbujon/ffe-sdk-events
branch
from
October 14, 2026 06:14
1bd785a to
df4901d
Compare
PerfectSlayer
force-pushed
the
bbujon/ffe-sdk-events
branch
from
October 14, 2026 07:09
df4901d to
f00b9ed
Compare
PerfectSlayer
force-pushed
the
bbujon/ffe-sdk-events
branch
from
October 14, 2026 08:06
f00b9ed to
55178c9
Compare
PerfectSlayer
force-pushed
the
bbujon/ffe-sdk-events
branch
from
October 14, 2026 08:37
55178c9 to
b306f3d
Compare
PerfectSlayer
force-pushed
the
bbujon/ffe-sdk-events
branch
from
October 14, 2026 08:42
b306f3d to
d943b6b
Compare
gh-worker-dd-mergequeue-cf854d
Bot
force-pushed
the
bbujon/ffe-sdk-events
branch
from
October 14, 2026 13:41
d943b6b to
c482b7d
Compare
Add the exposure and flag evaluation event pipelines: deduplication, aggregation, payload building and batching over the event transport. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
PerfectSlayer
force-pushed
the
bbujon/ffe-sdk-events
branch
from
October 14, 2026 13:55
c482b7d to
28a1159
Compare
This branch has not been deployed
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.
What Does This Do
Adds the exposure and flag evaluation event pipelines to the
dd-openfeatureSDK: exposure deduplication (LRU cache), evaluation aggregation, payload building and batching over the connector event transport. Includes the JMH benchmarks.Motivation
Event batching stays in the SDK; the agent only forwards payloads (APMLP-1512).
Additional Notes
The logic is ported almost entirely from the agent
feature-flagging-lib/feature-flagging-bootstrapmodules. Review carefully the two pipelines, now sending through the connectorEventTransportinstead of the agent EVP publisher, and the JSON serialization, moved from Moshi to hand-written Jackson streaming. Everything else is a package move.New files
exposure/ExposuresRequestTestserial_idpresent / zero / absent, context and subject attributesMoved, package rename only (no logic change)
exposure/Allocation,exposure/Flag,exposure/Subject,exposure/Variant,flagevaluation/FlagEvalEvent(from bootstrapdatadog.trace.api.featureflag.*)exposure/ExposureEvent: also drops the 5-arg convenience constructor,serial_idis passed explicitlyexposure/ExposureCache(fromfeature-flagging-lib)flagevaluation/FlagEvaluationAggregator: agentHashingUtilsreplaced by equivalent private helpersexposure/LRUExposureCacheTest(passes anullserial id),flagevaluation/FlagEvaluationAggregatorTestFlagEvaluationHotPathBenchmark,FlagEvaluationEnqueueContentionBenchmark, now buildingFlagEvaluationPipelinewith a no-opEventTransportandHealthMetrics.NOOPinstead of the agentConfig/BackendApiFactoryMoved with significant changes
exposure/ExposurePipelineExposureWriterImplexposuresroute throughEventTransportinstead ofFeatureFlagEvpPublisher. PlainConsumer<ExposureEvent>, no gateway listener registration. SDKEventQueuereplaces the JCTools queue,RuntimeServices.newThreadreplacesAgentThreadFactory. "EVP proxy unavailable" startup check removed. Dedup, batching and flush logic unchangedexposure/ExposuresRequestexposure/ExposuresRequestserialize()with Jackson streaming (JsonWriting) instead of Moshi reflection; nullsubject.id,subject.attributesandserial_idomittedexposure/LRUExposureCacheLRUExposureCacheLRUCachereplaced by an access-orderedLinkedHashMapflagevaluation/FlagEvaluationPipelineFlagEvaluationWriterImplflagevaluationroute throughEventTransport; agentless / proxy fallback now lives in the transport. Health counters throughRuntimeServices.countMetricinstead ofCoreMetricCollector.EventQueueandRuntimeServices.newThreadreplace JCTools and the agent thread. Gateway coupling (registration, enqueue gate, deregistration), EVP proxy fail-fast, error callback and test-only factories removed. Payload limit hard-coded to 5 MiB (wasEvpProxy.PAYLOAD_SIZE_LIMIT_BYTES). Aggregation, final flush and drop accounting unchangedflagevaluation/FlagEvaluationWriterflagevaluation/FlagEvaluationWriterenqueue,hasCapacityForEnqueue,countPreQueueOverflow,countContextTruncated); lifecycle moved toFlagEvaluationPipelineflagevaluation/FlagEvaluationPayloadsFlagEvaluationPayloadshashTargetingKeyinlined fromULeb128Encoder, same algorithmexposure/ExposurePipelineTestExposureWriterTestsEventTransport. Agentless, retry and EVP proxy tests dropped (now transport concerns). Added close, wire shape and non-finite attribute testsflagevaluation/FlagEvaluationPipelineTestFlagEvaluationWriterImplTestflagevaluation/FlagEvaluationTestSupportFlagEvaluationTestSupportBackendApi/ OkHttp capture replaced by aCapturingTransportandRecordingMetrics; Moshi replaced byJsonReadingShared files
dd-openfeature/build.gradle.kts: appliesdd-trace-java.jmh-conventionsfor the moved benchmarksStack
The full change is in #12709. It was split into this stack to ease the review.
Jira ticket: APMLP-1512
🤖 Generated with Claude Code