Skip to content

Commit 5dbb073

Browse files
cupofcatbeeme1mrtoddbaert
authored
feat(flagd): Support supplying providerId for in-process resolver as an option (#1259)
Signed-off-by: Maks Osowski <[email protected]> Co-authored-by: Michael Beemer <[email protected]> Co-authored-by: Todd Baert <[email protected]>
1 parent 0c2803a commit 5dbb073

File tree

5 files changed

+18
-1
lines changed

5 files changed

+18
-1
lines changed

providers/flagd/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ Given below are the supported configurations:
117117
| streamDeadlineMs | FLAGD_STREAM_DEADLINE_MS | int | 600000 | rpc & in-process |
118118
| keepAliveTime | FLAGD_KEEP_ALIVE_TIME_MS | long | 0 | rpc & in-process |
119119
| selector | FLAGD_SOURCE_SELECTOR | String | null | in-process |
120+
| providerId | FLAGD_SOURCE_PROVIDER_ID | String | null | in-process |
120121
| cache | FLAGD_CACHE | String - lru, disabled | lru | rpc |
121122
| maxCacheSize | FLAGD_MAX_CACHE_SIZE | int | 1000 | rpc |
122123
| maxEventStreamRetries | FLAGD_MAX_EVENT_STREAM_RETRIES | int | 5 | rpc |

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ public final class Config {
3434
static final String DEADLINE_MS_ENV_VAR_NAME = "FLAGD_DEADLINE_MS";
3535
static final String STREAM_DEADLINE_MS_ENV_VAR_NAME = "FLAGD_STREAM_DEADLINE_MS";
3636
static final String SOURCE_SELECTOR_ENV_VAR_NAME = "FLAGD_SOURCE_SELECTOR";
37+
static final String SOURCE_PROVIDER_ID_ENV_VAR_NAME = "FLAGD_SOURCE_PROVIDER_ID";
3738
static final String OFFLINE_SOURCE_PATH = "FLAGD_OFFLINE_FLAG_SOURCE_PATH";
3839
static final String OFFLINE_POLL_MS = "FLAGD_OFFLINE_POLL_MS";
3940
static final String KEEP_ALIVE_MS_ENV_VAR_NAME_OLD = "FLAGD_KEEP_ALIVE_TIME";

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,12 @@ public class FlagdOptions {
109109
@Builder.Default
110110
private String selector = fallBackToEnvOrDefault(Config.SOURCE_SELECTOR_ENV_VAR_NAME, null);
111111

112+
/**
113+
* ProviderId to be used with flag sync gRPC contract.
114+
**/
115+
@Builder.Default
116+
private String providerId = fallBackToEnvOrDefault(Config.SOURCE_PROVIDER_ID_ENV_VAR_NAME, null);
117+
112118
/**
113119
* gRPC client KeepAlive in milliseconds. Disabled with 0.
114120
* Defaults to 0 (disabled).

providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/storage/connector/grpc/GrpcStreamConnector.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ public class GrpcStreamConnector implements Connector {
3434
private final BlockingQueue<QueuePayload> blockingQueue = new LinkedBlockingQueue<>(QUEUE_SIZE);
3535
private final int deadline;
3636
private final String selector;
37+
private final String providerId;
3738
private final GrpcConnector<
3839
FlagSyncServiceGrpc.FlagSyncServiceStub, FlagSyncServiceGrpc.FlagSyncServiceBlockingStub>
3940
grpcConnector;
@@ -45,6 +46,7 @@ public class GrpcStreamConnector implements Connector {
4546
public GrpcStreamConnector(final FlagdOptions options, Consumer<FlagdProviderEvent> onConnectionEvent) {
4647
deadline = options.getDeadline();
4748
selector = options.getSelector();
49+
providerId = options.getProviderId();
4850
streamReceiver = new LinkedBlockingQueue<>(QUEUE_SIZE);
4951
grpcConnector = new GrpcConnector<>(
5052
options,
@@ -53,11 +55,15 @@ public GrpcStreamConnector(final FlagdOptions options, Consumer<FlagdProviderEve
5355
onConnectionEvent,
5456
stub -> {
5557
String localSelector = selector;
58+
String localProviderId = providerId;
5659

5760
final SyncFlagsRequest.Builder syncRequest = SyncFlagsRequest.newBuilder();
5861
if (localSelector != null) {
5962
syncRequest.setSelector(localSelector);
6063
}
64+
if (localProviderId != null) {
65+
syncRequest.setProviderId(localProviderId);
66+
}
6167

6268
stub.syncFlags(syncRequest.build(), new GrpcStreamHandler(streamReceiver));
6369
});

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,14 @@
1010
import static dev.openfeature.contrib.providers.flagd.Config.RESOLVER_ENV_VAR;
1111
import static dev.openfeature.contrib.providers.flagd.Config.RESOLVER_IN_PROCESS;
1212
import static dev.openfeature.contrib.providers.flagd.Config.RESOLVER_RPC;
13-
import static dev.openfeature.contrib.providers.flagd.Config.Resolver;
1413
import static dev.openfeature.contrib.providers.flagd.Config.TARGET_URI_ENV_VAR_NAME;
1514
import static org.assertj.core.api.Assertions.assertThat;
1615
import static org.junit.jupiter.api.Assertions.assertEquals;
1716
import static org.junit.jupiter.api.Assertions.assertFalse;
1817
import static org.junit.jupiter.api.Assertions.assertNull;
1918
import static org.junit.jupiter.api.Assertions.assertTrue;
2019

20+
import dev.openfeature.contrib.providers.flagd.Config.Resolver;
2121
import dev.openfeature.contrib.providers.flagd.resolver.process.storage.MockConnector;
2222
import dev.openfeature.contrib.providers.flagd.resolver.process.storage.connector.Connector;
2323
import io.grpc.ClientInterceptor;
@@ -44,6 +44,7 @@ void TestDefaults() {
4444
assertEquals(DEFAULT_CACHE, builder.getCacheType());
4545
assertEquals(DEFAULT_MAX_CACHE_SIZE, builder.getMaxCacheSize());
4646
assertNull(builder.getSelector());
47+
assertNull(builder.getProviderId());
4748
assertNull(builder.getOpenTelemetry());
4849
assertNull(builder.getCustomConnector());
4950
assertNull(builder.getOfflineFlagSourcePath());
@@ -67,6 +68,7 @@ void TestBuilderOptions() {
6768
.cacheType("lru")
6869
.maxCacheSize(100)
6970
.selector("app=weatherApp")
71+
.providerId("test/provider/id_1")
7072
.openTelemetry(openTelemetry)
7173
.customConnector(connector)
7274
.resolverType(Resolver.IN_PROCESS)
@@ -83,6 +85,7 @@ void TestBuilderOptions() {
8385
assertEquals("lru", flagdOptions.getCacheType());
8486
assertEquals(100, flagdOptions.getMaxCacheSize());
8587
assertEquals("app=weatherApp", flagdOptions.getSelector());
88+
assertEquals("test/provider/id_1", flagdOptions.getProviderId());
8689
assertEquals(openTelemetry, flagdOptions.getOpenTelemetry());
8790
assertEquals(connector, flagdOptions.getCustomConnector());
8891
assertEquals(Resolver.IN_PROCESS, flagdOptions.getResolverType());

0 commit comments

Comments
 (0)