10
10
import dev .openfeature .sdk .EventProvider ;
11
11
import dev .openfeature .sdk .Hook ;
12
12
import dev .openfeature .sdk .ImmutableContext ;
13
- import dev .openfeature .sdk .ImmutableStructure ;
14
13
import dev .openfeature .sdk .Metadata ;
15
14
import dev .openfeature .sdk .ProviderEvaluation ;
16
15
import dev .openfeature .sdk .ProviderEvent ;
@@ -184,19 +183,6 @@ public ProviderEvaluation<Value> getObjectEvaluation(String key, Value defaultVa
184
183
return flagResolver .objectEvaluation (key , defaultValue , ctx );
185
184
}
186
185
187
- /**
188
- * An unmodifiable view of a Structure representing the latest result of the
189
- * SyncMetadata.
190
- * Set on initial connection and updated with every reconnection.
191
- * see:
192
- * https://buf.build/open-feature/flagd/docs/main:flagd.sync.v1#flagd.sync.v1.FlagSyncService.GetMetadata
193
- *
194
- * @return Object map representing sync metadata
195
- */
196
- protected Structure getSyncMetadata () {
197
- return new ImmutableStructure (eventsLock .syncMetadata .asMap ());
198
- }
199
-
200
186
/**
201
187
* The updated context mixed into all evaluations based on the sync-metadata.
202
188
*
@@ -211,10 +197,6 @@ private void onProviderEvent(FlagdProviderEvent flagdProviderEvent) {
211
197
212
198
synchronized (eventsLock ) {
213
199
log .info ("FlagdProviderEvent: {}" , flagdProviderEvent .getEvent ());
214
- eventsLock .syncMetadata = flagdProviderEvent .getSyncMetadata ();
215
- if (flagdProviderEvent .getSyncMetadata () != null ) {
216
- eventsLock .enrichedContext = contextEnricher .apply (flagdProviderEvent .getSyncMetadata ());
217
- }
218
200
219
201
/*
220
202
* We only use Error and Ready as previous states.
@@ -233,6 +215,13 @@ private void onProviderEvent(FlagdProviderEvent flagdProviderEvent) {
233
215
}
234
216
// intentional fall through, a not-ready change will trigger a ready.
235
217
case PROVIDER_READY :
218
+ /*
219
+ * Sync metadata is used to enrich the context, and is immutable in flagd,
220
+ * so we only need it to be fetched once at READY.
221
+ */
222
+ if (flagdProviderEvent .getSyncMetadata () != null ) {
223
+ eventsLock .enrichedContext = contextEnricher .apply (flagdProviderEvent .getSyncMetadata ());
224
+ }
236
225
onReady ();
237
226
eventsLock .previousEvent = ProviderEvent .PROVIDER_READY ;
238
227
break ;
@@ -304,7 +293,6 @@ private void onError() {
304
293
*/
305
294
static class EventsLock {
306
295
volatile ProviderEvent previousEvent = null ;
307
- volatile Structure syncMetadata = new ImmutableStructure ();
308
296
volatile boolean initialized = false ;
309
297
volatile EvaluationContext enrichedContext = new ImmutableContext ();
310
298
}
0 commit comments