Skip to content

Commit 5bd3d9d

Browse files
committed
Merge branch 'upgrade-flipt-provider' of https://github.com/flipt-io/java-sdk-contrib into upgrade-flipt-provider
* 'upgrade-flipt-provider' of https://github.com/flipt-io/java-sdk-contrib: feat: synchronize initialization and shutdown (open-feature#635)
2 parents 4b4d021 + 4fa7911 commit 5bd3d9d

File tree

2 files changed

+44
-4
lines changed

2 files changed

+44
-4
lines changed

providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/FlagdProvider.java

+13-2
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ public class FlagdProvider extends EventProvider implements FeatureProvider {
2929
private final ReadWriteLock lock = new ReentrantReadWriteLock();
3030
private final Resolver flagResolver;
3131
private ProviderState state = ProviderState.NOT_READY;
32+
private boolean initialized = false;
3233

3334
private EvaluationContext evaluationContext;
3435

@@ -63,15 +64,25 @@ public FlagdProvider(final FlagdOptions options) {
6364
}
6465

6566
@Override
66-
public void initialize(EvaluationContext evaluationContext) throws Exception {
67+
public synchronized void initialize(EvaluationContext evaluationContext) throws Exception {
68+
if (this.initialized) {
69+
return;
70+
}
71+
6772
this.evaluationContext = evaluationContext;
6873
this.flagResolver.init();
74+
this.initialized = true;
6975
}
7076

7177
@Override
72-
public void shutdown() {
78+
public synchronized void shutdown() {
79+
if (!initialized) {
80+
return;
81+
}
82+
7383
try {
7484
this.flagResolver.shutdown();
85+
this.initialized = false;
7586
} catch (Exception e) {
7687
log.error("Error during shutdown {}", FLAGD_PROVIDER, e);
7788
}

providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/FlagdProviderTest.java

+31-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import dev.openfeature.contrib.providers.flagd.resolver.grpc.GrpcConnector;
66
import dev.openfeature.contrib.providers.flagd.resolver.grpc.GrpcResolver;
77
import dev.openfeature.contrib.providers.flagd.resolver.grpc.cache.Cache;
8-
import dev.openfeature.flagd.grpc.Schema.EventStreamResponse;
98
import dev.openfeature.flagd.grpc.Schema.ResolveBooleanRequest;
109
import dev.openfeature.flagd.grpc.Schema.ResolveBooleanResponse;
1110
import dev.openfeature.flagd.grpc.Schema.ResolveFloatResponse;
@@ -15,6 +14,7 @@
1514
import dev.openfeature.flagd.grpc.ServiceGrpc;
1615
import dev.openfeature.flagd.grpc.ServiceGrpc.ServiceBlockingStub;
1716
import dev.openfeature.flagd.grpc.ServiceGrpc.ServiceStub;
17+
import dev.openfeature.sdk.EvaluationContext;
1818
import dev.openfeature.sdk.FlagEvaluationDetails;
1919
import dev.openfeature.sdk.ImmutableContext;
2020
import dev.openfeature.sdk.ImmutableMetadata;
@@ -50,6 +50,7 @@
5050
import static org.mockito.ArgumentMatchers.argThat;
5151
import static org.mockito.Mockito.mock;
5252
import static org.mockito.Mockito.mockStatic;
53+
import static org.mockito.Mockito.times;
5354
import static org.mockito.Mockito.verify;
5455
import static org.mockito.Mockito.when;
5556

@@ -788,7 +789,35 @@ void contextMerging() throws Exception {
788789
ctx -> ctx.asMap().entrySet().containsAll(expectedCtx.entrySet())));
789790
}
790791

791-
// test utils
792+
@Test
793+
void initializationAndShutdown() throws Exception{
794+
// given
795+
final FlagdProvider provider = new FlagdProvider();
796+
final EvaluationContext ctx = new ImmutableContext();
797+
798+
final Resolver resolverMock = mock(Resolver.class);
799+
800+
Field flagResolver = FlagdProvider.class.getDeclaredField("flagResolver");
801+
flagResolver.setAccessible(true);
802+
flagResolver.set(provider, resolverMock);
803+
804+
// when
805+
806+
// validate multiple initialization
807+
provider.initialize(ctx);
808+
provider.initialize(ctx);
809+
810+
// validate multiple shutdowns
811+
provider.shutdown();
812+
provider.shutdown();
813+
814+
// then
815+
verify(resolverMock, times(1)).init();
816+
verify(resolverMock, times(1)).shutdown();
817+
}
818+
819+
820+
// test helper
792821

793822
// create provider with given grpc connector
794823
private FlagdProvider createProvider(GrpcConnector grpc) {

0 commit comments

Comments
 (0)