@@ -41,6 +41,7 @@ public class FlagdProvider extends EventProvider {
41
41
private volatile EvaluationContext enrichedContext = new ImmutableContext ();
42
42
private final List <Hook > hooks = new ArrayList <>();
43
43
private volatile ProviderEvent previousEvent = null ;
44
+ private final Object eventLock ;
44
45
45
46
/**
46
47
* An executor service responsible for emitting {@link ProviderEvent#PROVIDER_ERROR} after the provider went
@@ -97,6 +98,7 @@ public FlagdProvider(final FlagdOptions options) {
97
98
this .errorExecutor = Executors .newSingleThreadScheduledExecutor ();
98
99
this .gracePeriod = options .getRetryGracePeriod ();
99
100
this .deadline = options .getDeadline ();
101
+ this .eventLock = new Object ();
100
102
}
101
103
102
104
@ Override
@@ -188,39 +190,42 @@ EvaluationContext getEnrichedContext() {
188
190
}
189
191
190
192
@ SuppressWarnings ("checkstyle:fallthrough" )
191
- private synchronized void onProviderEvent (FlagdProviderEvent flagdProviderEvent ) {
193
+ private void onProviderEvent (FlagdProviderEvent flagdProviderEvent ) {
192
194
193
- syncMetadata = flagdProviderEvent .getSyncMetadata ();
194
- if (flagdProviderEvent .getSyncMetadata () != null ) {
195
- enrichedContext = contextEnricher .apply (flagdProviderEvent .getSyncMetadata ());
196
- }
195
+ synchronized (eventLock ) {
196
+ log .info ("FlagdProviderEvent: {}" , flagdProviderEvent );
197
+ syncMetadata = flagdProviderEvent .getSyncMetadata ();
198
+ if (flagdProviderEvent .getSyncMetadata () != null ) {
199
+ enrichedContext = contextEnricher .apply (flagdProviderEvent .getSyncMetadata ());
200
+ }
197
201
198
- /*
199
- We only use Error and Ready as previous states.
200
- As error will first be emitted as Stale, and only turns after a while into an emitted Error.
201
- Ready is needed, as the InProcessResolver does not have a dedicated ready event, hence we need to
202
- forward a configuration changed to the ready, if we are not in the ready state.
203
- */
204
- switch (flagdProviderEvent .getEvent ()) {
205
- case PROVIDER_CONFIGURATION_CHANGED :
206
- if (previousEvent == ProviderEvent .PROVIDER_READY ) {
207
- onConfigurationChanged (flagdProviderEvent );
202
+ /*
203
+ We only use Error and Ready as previous states.
204
+ As error will first be emitted as Stale, and only turns after a while into an emitted Error.
205
+ Ready is needed, as the InProcessResolver does not have a dedicated ready event, hence we need to
206
+ forward a configuration changed to the ready, if we are not in the ready state.
207
+ */
208
+ switch (flagdProviderEvent .getEvent ()) {
209
+ case PROVIDER_CONFIGURATION_CHANGED :
210
+ if (previousEvent == ProviderEvent .PROVIDER_READY ) {
211
+ onConfigurationChanged (flagdProviderEvent );
212
+ break ;
213
+ }
214
+ // intentional fall through, a not-ready change will trigger a ready.
215
+ case PROVIDER_READY :
216
+ onReady ();
217
+ previousEvent = ProviderEvent .PROVIDER_READY ;
208
218
break ;
209
- }
210
- // intentional fall through, a not-ready change will trigger a ready.
211
- case PROVIDER_READY :
212
- onReady ();
213
- previousEvent = ProviderEvent .PROVIDER_READY ;
214
- break ;
215
219
216
- case PROVIDER_ERROR :
217
- if (previousEvent != ProviderEvent .PROVIDER_ERROR ) {
218
- onError ();
219
- }
220
- previousEvent = ProviderEvent .PROVIDER_ERROR ;
221
- break ;
222
- default :
223
- log .info ("Unknown event {}" , flagdProviderEvent .getEvent ());
220
+ case PROVIDER_ERROR :
221
+ if (previousEvent != ProviderEvent .PROVIDER_ERROR ) {
222
+ onError ();
223
+ }
224
+ previousEvent = ProviderEvent .PROVIDER_ERROR ;
225
+ break ;
226
+ default :
227
+ log .info ("Unknown event {}" , flagdProviderEvent .getEvent ());
228
+ }
224
229
}
225
230
}
226
231
@@ -258,7 +263,7 @@ private void onError() {
258
263
if (!errorExecutor .isShutdown ()) {
259
264
errorTask = errorExecutor .schedule (
260
265
() -> {
261
- if (previousEvent == ProviderEvent .PROVIDER_ERROR ) {
266
+ if (previousEvent == ProviderEvent .PROVIDER_ERROR ) {
262
267
log .debug (
263
268
"Provider did not reconnect successfully within {}s. Emit ERROR event..." ,
264
269
gracePeriod );
0 commit comments