[FeatureFlags] Remove the manual (non-OpenFeature) Feature Flags API - #9260
Conversation
BenchmarksBenchmark execution time: 2026-09-16 14:31:49 Comparing candidate commit f31de54 in PR branch Found 0 performance improvements and 1 performance regressions! Performance is the same for 71 metrics, 0 unstable metrics, 63 known flaky benchmarks, 63 flaky benchmarks without significant changes.
|
|
I understand the goal of consolidating on OpenFeature. Although hidden and experimental, it has shipped since Since both entry points already share the backend, would retaining the existing adapter be feasible while directing new usage to OpenFeature? Long-term compatibility also came up in the original review, so I’d like to understand whether there are maintenance constraints or assumptions about existing usage that I’m missing |
@bouwkast thanks for your concern. |
andrewlock
left a comment
There was a problem hiding this comment.
As discussed, we normally would not want to make these changes in minor releases. However, given the API was experimental, hidden from the public API, and you're sure noone's using it, I'm ok with us removing it (better now than later). If that proves to be too disruptive, we can consider reverting it.
Execution-Time Benchmarks Report ⏱️Execution-time results for samples comparing This PR (9260) and master. ✅ No regressions detected |
bouwkast
left a comment
There was a problem hiding this comment.
Thanks for the clarification
Could we update that clarification in the PR description, that we are confident that nobody is using this and that it was never advertised that way it will show up in git history as the explicit reason?
leoromanovsky
left a comment
There was a problem hiding this comment.
Good idea on this. I don't have exact usage information, but all the customers who have wrote into support have been using openfeature so I feel reasonable that this API is not used.
Summary of changes
Removes
Datadog.Trace.FeatureFlags.FeatureFlagsSdk, the manual non-OpenFeature Feature FlagsAPI, from
Datadog.Trace.Manual, along with its three CallTargets and its test sample.OpenFeature (
Datadog.FeatureFlags.OpenFeature) becomes the only way to evaluate flags in .NET.Reason for change
.NET was the only tracer with a second, Datadog-specific evaluation surface — Java, Go and Node
ship OpenFeature only. If OpenFeature is the intended supported approach, the duplicate is better
removed now, while Feature Flags is experimental and gated behind
DD_EXPERIMENTAL_FLAGGING_PROVIDER_ENABLED, than after customers adopt it.The surface shipped in v3.36.0 (#7896). It is undocumented and excluded from the public API
snapshot:
PublicApiTestsBaseskips types carrying both[Browsable(false)]and[EditorBrowsable(Never)], soFeatureFlagsSdkappears nowhere inPublicApiTests.Datadog.Trace.Manual.PublicApiHasNotChanged.verified.txt.It also makes sense to remove it now while no customers use it.
Implementation details
Deleted:
Datadog.Trace.Manual/FeatureFlags/—FeatureFlagsSdk,EvaluationContext,IEvaluation.ManualManualInstrumentation/FeatureFlags/— theEvaluate,IsAvailableandRegisterOnNewConfigEventHandlerCallTargets<Compile Include>links inDatadog.Trace.Manual.csproj(EvaluationReason,ValueType,IEvaluation).Datadog.FeatureFlags.OpenFeature.csprojlinks its own copiesstraight from
Datadog.Traceand is unaffectedSamples.FeatureFlagsproject, with itsDatadog.Trace.slnand CODEOWNERS entriesProgram.cswas shared by both samples through a<Compile Include>link, so it moves intoSamples.OpenFeatureand the link is dropped.Generated files regenerated with
CompileManagedSrcandRegenerateSolutions. The diffs are puredeletions of the three rows, with no signature renumbering.
Test coverage
FeatureFlagsTests,OpenFeatureFeatureFlagsTestsandFeatureFlagsTestsBasecollapse into asingle
FeatureFlagsTestson the OpenFeature sample. Coverage of the manual surface goes awaywith the surface itself.
Two sample-side improvements come with the move:
Samples.OpenFeature'sEvaluator.Init()awaitsSetProviderAsyncinstead of calling.Wait()<INITIALIZED: READY>probe and assertion — the only coverage of the OpenFeatureInitializeAsyncCallTarget merged in feat(feature-flags): wire source-agnostic activation and OpenFeature InitializeAsync #9044Other details
Breaking change for anyone calling
Datadog.Trace.FeatureFlags.FeatureFlagsSdkdirectly.