Skip to content

Commit c24fcb5

Browse files
committed
feat(flagd): Add ProviderId option
Signed-off-by: Maks Osowski <[email protected]>
1 parent ec12ef7 commit c24fcb5

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
@@ -116,6 +116,7 @@ Given below are the supported configurations:
116116
| streamDeadlineMs | FLAGD_STREAM_DEADLINE_MS | int | 600000 | rpc & in-process |
117117
| keepAliveTime | FLAGD_KEEP_ALIVE_TIME_MS | long | 0 | rpc & in-process |
118118
| selector | FLAGD_SOURCE_SELECTOR | String | null | in-process |
119+
| providerId | FLAGD_SOURCE_PROVIDER_ID | String | null | in-process |
119120
| cache | FLAGD_CACHE | String - lru, disabled | lru | rpc |
120121
| maxCacheSize | FLAGD_MAX_CACHE_SIZE | int | 1000 | rpc |
121122
| 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
@@ -33,6 +33,7 @@ public final class Config {
3333
static final String DEADLINE_MS_ENV_VAR_NAME = "FLAGD_DEADLINE_MS";
3434
static final String STREAM_DEADLINE_MS_ENV_VAR_NAME = "FLAGD_STREAM_DEADLINE_MS";
3535
static final String SOURCE_SELECTOR_ENV_VAR_NAME = "FLAGD_SOURCE_SELECTOR";
36+
static final String SOURCE_PROVIDER_ID_ENV_VAR_NAME = "FLAGD_SOURCE_PROVIDER_ID";
3637
static final String OFFLINE_SOURCE_PATH = "FLAGD_OFFLINE_FLAG_SOURCE_PATH";
3738
static final String OFFLINE_POLL_MS = "FLAGD_OFFLINE_POLL_MS";
3839
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
@@ -107,6 +107,12 @@ public class FlagdOptions {
107107
@Builder.Default
108108
private String selector = fallBackToEnvOrDefault(Config.SOURCE_SELECTOR_ENV_VAR_NAME, null);
109109

110+
/**
111+
* ProviderId to be used with flag sync gRPC contract.
112+
**/
113+
@Builder.Default
114+
private String providerId = fallBackToEnvOrDefault(Config.SOURCE_PROVIDER_ID_ENV_VAR_NAME, null);
115+
110116
/**
111117
* gRPC client KeepAlive in milliseconds. Disabled with 0.
112118
* 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.opentelemetry.api.OpenTelemetry;
@@ -41,6 +41,7 @@ void TestDefaults() {
4141
assertEquals(DEFAULT_CACHE, builder.getCacheType());
4242
assertEquals(DEFAULT_MAX_CACHE_SIZE, builder.getMaxCacheSize());
4343
assertNull(builder.getSelector());
44+
assertNull(builder.getProviderId());
4445
assertNull(builder.getOpenTelemetry());
4546
assertNull(builder.getCustomConnector());
4647
assertNull(builder.getOfflineFlagSourcePath());
@@ -61,6 +62,7 @@ void TestBuilderOptions() {
6162
.cacheType("lru")
6263
.maxCacheSize(100)
6364
.selector("app=weatherApp")
65+
.providerId("test/provider/id_1")
6466
.openTelemetry(openTelemetry)
6567
.customConnector(connector)
6668
.resolverType(Resolver.IN_PROCESS)
@@ -75,6 +77,7 @@ void TestBuilderOptions() {
7577
assertEquals("lru", flagdOptions.getCacheType());
7678
assertEquals(100, flagdOptions.getMaxCacheSize());
7779
assertEquals("app=weatherApp", flagdOptions.getSelector());
80+
assertEquals("test/provider/id_1", flagdOptions.getProviderId());
7881
assertEquals(openTelemetry, flagdOptions.getOpenTelemetry());
7982
assertEquals(connector, flagdOptions.getCustomConnector());
8083
assertEquals(Resolver.IN_PROCESS, flagdOptions.getResolverType());

0 commit comments

Comments
 (0)