From c24fcb5ee0d92518854741b5385ecf06d5d2d5c5 Mon Sep 17 00:00:00 2001 From: Maks Osowski Date: Tue, 4 Mar 2025 15:18:27 +0100 Subject: [PATCH 1/3] feat(flagd): Add ProviderId option Signed-off-by: Maks Osowski --- providers/flagd/README.md | 1 + .../dev/openfeature/contrib/providers/flagd/Config.java | 1 + .../openfeature/contrib/providers/flagd/FlagdOptions.java | 6 ++++++ .../process/storage/connector/grpc/GrpcStreamConnector.java | 6 ++++++ .../contrib/providers/flagd/FlagdOptionsTest.java | 5 ++++- 5 files changed, 18 insertions(+), 1 deletion(-) diff --git a/providers/flagd/README.md b/providers/flagd/README.md index 93e0df19c..681c0bf93 100644 --- a/providers/flagd/README.md +++ b/providers/flagd/README.md @@ -116,6 +116,7 @@ Given below are the supported configurations: | streamDeadlineMs | FLAGD_STREAM_DEADLINE_MS | int | 600000 | rpc & in-process | | keepAliveTime | FLAGD_KEEP_ALIVE_TIME_MS | long | 0 | rpc & in-process | | selector | FLAGD_SOURCE_SELECTOR | String | null | in-process | +| providerId | FLAGD_SOURCE_PROVIDER_ID | String | null | in-process | | cache | FLAGD_CACHE | String - lru, disabled | lru | rpc | | maxCacheSize | FLAGD_MAX_CACHE_SIZE | int | 1000 | rpc | | maxEventStreamRetries | FLAGD_MAX_EVENT_STREAM_RETRIES | int | 5 | rpc | diff --git a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/Config.java b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/Config.java index 8c6da726c..0753038e0 100644 --- a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/Config.java +++ b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/Config.java @@ -33,6 +33,7 @@ public final class Config { static final String DEADLINE_MS_ENV_VAR_NAME = "FLAGD_DEADLINE_MS"; static final String STREAM_DEADLINE_MS_ENV_VAR_NAME = "FLAGD_STREAM_DEADLINE_MS"; static final String SOURCE_SELECTOR_ENV_VAR_NAME = "FLAGD_SOURCE_SELECTOR"; + static final String SOURCE_PROVIDER_ID_ENV_VAR_NAME = "FLAGD_SOURCE_PROVIDER_ID"; static final String OFFLINE_SOURCE_PATH = "FLAGD_OFFLINE_FLAG_SOURCE_PATH"; static final String OFFLINE_POLL_MS = "FLAGD_OFFLINE_POLL_MS"; static final String KEEP_ALIVE_MS_ENV_VAR_NAME_OLD = "FLAGD_KEEP_ALIVE_TIME"; diff --git a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/FlagdOptions.java b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/FlagdOptions.java index 3d75d1063..fa986122d 100644 --- a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/FlagdOptions.java +++ b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/FlagdOptions.java @@ -107,6 +107,12 @@ public class FlagdOptions { @Builder.Default private String selector = fallBackToEnvOrDefault(Config.SOURCE_SELECTOR_ENV_VAR_NAME, null); + /** + * ProviderId to be used with flag sync gRPC contract. + **/ + @Builder.Default + private String providerId = fallBackToEnvOrDefault(Config.SOURCE_PROVIDER_ID_ENV_VAR_NAME, null); + /** * gRPC client KeepAlive in milliseconds. Disabled with 0. * Defaults to 0 (disabled). diff --git a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/storage/connector/grpc/GrpcStreamConnector.java b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/storage/connector/grpc/GrpcStreamConnector.java index 541c2fd15..0445efd8d 100644 --- a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/storage/connector/grpc/GrpcStreamConnector.java +++ b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/storage/connector/grpc/GrpcStreamConnector.java @@ -34,6 +34,7 @@ public class GrpcStreamConnector implements Connector { private final BlockingQueue blockingQueue = new LinkedBlockingQueue<>(QUEUE_SIZE); private final int deadline; private final String selector; + private final String providerId; private final GrpcConnector< FlagSyncServiceGrpc.FlagSyncServiceStub, FlagSyncServiceGrpc.FlagSyncServiceBlockingStub> grpcConnector; @@ -45,6 +46,7 @@ public class GrpcStreamConnector implements Connector { public GrpcStreamConnector(final FlagdOptions options, Consumer onConnectionEvent) { deadline = options.getDeadline(); selector = options.getSelector(); + providerId = options.getProviderId(); streamReceiver = new LinkedBlockingQueue<>(QUEUE_SIZE); grpcConnector = new GrpcConnector<>( options, @@ -53,11 +55,15 @@ public GrpcStreamConnector(final FlagdOptions options, Consumer { String localSelector = selector; + String localProviderId = providerId; final SyncFlagsRequest.Builder syncRequest = SyncFlagsRequest.newBuilder(); if (localSelector != null) { syncRequest.setSelector(localSelector); } + if (localProviderId != null) { + syncRequest.setProviderId(localProviderId); + } stub.syncFlags(syncRequest.build(), new GrpcStreamHandler(streamReceiver)); }); diff --git a/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/FlagdOptionsTest.java b/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/FlagdOptionsTest.java index 30c08dcd8..616b0b479 100644 --- a/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/FlagdOptionsTest.java +++ b/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/FlagdOptionsTest.java @@ -10,7 +10,6 @@ import static dev.openfeature.contrib.providers.flagd.Config.RESOLVER_ENV_VAR; import static dev.openfeature.contrib.providers.flagd.Config.RESOLVER_IN_PROCESS; import static dev.openfeature.contrib.providers.flagd.Config.RESOLVER_RPC; -import static dev.openfeature.contrib.providers.flagd.Config.Resolver; import static dev.openfeature.contrib.providers.flagd.Config.TARGET_URI_ENV_VAR_NAME; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -18,6 +17,7 @@ import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; +import dev.openfeature.contrib.providers.flagd.Config.Resolver; import dev.openfeature.contrib.providers.flagd.resolver.process.storage.MockConnector; import dev.openfeature.contrib.providers.flagd.resolver.process.storage.connector.Connector; import io.opentelemetry.api.OpenTelemetry; @@ -41,6 +41,7 @@ void TestDefaults() { assertEquals(DEFAULT_CACHE, builder.getCacheType()); assertEquals(DEFAULT_MAX_CACHE_SIZE, builder.getMaxCacheSize()); assertNull(builder.getSelector()); + assertNull(builder.getProviderId()); assertNull(builder.getOpenTelemetry()); assertNull(builder.getCustomConnector()); assertNull(builder.getOfflineFlagSourcePath()); @@ -61,6 +62,7 @@ void TestBuilderOptions() { .cacheType("lru") .maxCacheSize(100) .selector("app=weatherApp") + .providerId("test/provider/id_1") .openTelemetry(openTelemetry) .customConnector(connector) .resolverType(Resolver.IN_PROCESS) @@ -75,6 +77,7 @@ void TestBuilderOptions() { assertEquals("lru", flagdOptions.getCacheType()); assertEquals(100, flagdOptions.getMaxCacheSize()); assertEquals("app=weatherApp", flagdOptions.getSelector()); + assertEquals("test/provider/id_1", flagdOptions.getProviderId()); assertEquals(openTelemetry, flagdOptions.getOpenTelemetry()); assertEquals(connector, flagdOptions.getCustomConnector()); assertEquals(Resolver.IN_PROCESS, flagdOptions.getResolverType()); From d11e4a918391f9f361b85c10902f0f2a20fa4895 Mon Sep 17 00:00:00 2001 From: Maks Osowski Date: Tue, 4 Mar 2025 17:10:30 +0100 Subject: [PATCH 2/3] chore(flagd): Capitalize ID in providerID, for consistency with Go Signed-off-by: Maks Osowski --- providers/flagd/README.md | 2 +- .../contrib/providers/flagd/FlagdOptions.java | 4 ++-- .../storage/connector/grpc/GrpcStreamConnector.java | 10 +++++----- .../contrib/providers/flagd/FlagdOptionsTest.java | 6 +++--- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/providers/flagd/README.md b/providers/flagd/README.md index 681c0bf93..7051ba93d 100644 --- a/providers/flagd/README.md +++ b/providers/flagd/README.md @@ -116,7 +116,7 @@ Given below are the supported configurations: | streamDeadlineMs | FLAGD_STREAM_DEADLINE_MS | int | 600000 | rpc & in-process | | keepAliveTime | FLAGD_KEEP_ALIVE_TIME_MS | long | 0 | rpc & in-process | | selector | FLAGD_SOURCE_SELECTOR | String | null | in-process | -| providerId | FLAGD_SOURCE_PROVIDER_ID | String | null | in-process | +| providerID | FLAGD_SOURCE_PROVIDER_ID | String | null | in-process | | cache | FLAGD_CACHE | String - lru, disabled | lru | rpc | | maxCacheSize | FLAGD_MAX_CACHE_SIZE | int | 1000 | rpc | | maxEventStreamRetries | FLAGD_MAX_EVENT_STREAM_RETRIES | int | 5 | rpc | diff --git a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/FlagdOptions.java b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/FlagdOptions.java index fa986122d..8a30744b4 100644 --- a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/FlagdOptions.java +++ b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/FlagdOptions.java @@ -108,10 +108,10 @@ public class FlagdOptions { private String selector = fallBackToEnvOrDefault(Config.SOURCE_SELECTOR_ENV_VAR_NAME, null); /** - * ProviderId to be used with flag sync gRPC contract. + * ProviderID to be used with flag sync gRPC contract. **/ @Builder.Default - private String providerId = fallBackToEnvOrDefault(Config.SOURCE_PROVIDER_ID_ENV_VAR_NAME, null); + private String providerID = fallBackToEnvOrDefault(Config.SOURCE_PROVIDER_ID_ENV_VAR_NAME, null); /** * gRPC client KeepAlive in milliseconds. Disabled with 0. diff --git a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/storage/connector/grpc/GrpcStreamConnector.java b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/storage/connector/grpc/GrpcStreamConnector.java index 0445efd8d..b613e9b71 100644 --- a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/storage/connector/grpc/GrpcStreamConnector.java +++ b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/storage/connector/grpc/GrpcStreamConnector.java @@ -34,7 +34,7 @@ public class GrpcStreamConnector implements Connector { private final BlockingQueue blockingQueue = new LinkedBlockingQueue<>(QUEUE_SIZE); private final int deadline; private final String selector; - private final String providerId; + private final String providerID; private final GrpcConnector< FlagSyncServiceGrpc.FlagSyncServiceStub, FlagSyncServiceGrpc.FlagSyncServiceBlockingStub> grpcConnector; @@ -46,7 +46,7 @@ public class GrpcStreamConnector implements Connector { public GrpcStreamConnector(final FlagdOptions options, Consumer onConnectionEvent) { deadline = options.getDeadline(); selector = options.getSelector(); - providerId = options.getProviderId(); + providerID = options.getProviderID(); streamReceiver = new LinkedBlockingQueue<>(QUEUE_SIZE); grpcConnector = new GrpcConnector<>( options, @@ -55,14 +55,14 @@ public GrpcStreamConnector(final FlagdOptions options, Consumer { String localSelector = selector; - String localProviderId = providerId; + String localProviderID = providerID; final SyncFlagsRequest.Builder syncRequest = SyncFlagsRequest.newBuilder(); if (localSelector != null) { syncRequest.setSelector(localSelector); } - if (localProviderId != null) { - syncRequest.setProviderId(localProviderId); + if (localProviderID != null) { + syncRequest.setProviderId(localProviderID); } stub.syncFlags(syncRequest.build(), new GrpcStreamHandler(streamReceiver)); diff --git a/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/FlagdOptionsTest.java b/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/FlagdOptionsTest.java index 616b0b479..2f8789ae5 100644 --- a/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/FlagdOptionsTest.java +++ b/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/FlagdOptionsTest.java @@ -41,7 +41,7 @@ void TestDefaults() { assertEquals(DEFAULT_CACHE, builder.getCacheType()); assertEquals(DEFAULT_MAX_CACHE_SIZE, builder.getMaxCacheSize()); assertNull(builder.getSelector()); - assertNull(builder.getProviderId()); + assertNull(builder.getProviderID()); assertNull(builder.getOpenTelemetry()); assertNull(builder.getCustomConnector()); assertNull(builder.getOfflineFlagSourcePath()); @@ -62,7 +62,7 @@ void TestBuilderOptions() { .cacheType("lru") .maxCacheSize(100) .selector("app=weatherApp") - .providerId("test/provider/id_1") + .providerID("test/provider/id_1") .openTelemetry(openTelemetry) .customConnector(connector) .resolverType(Resolver.IN_PROCESS) @@ -77,7 +77,7 @@ void TestBuilderOptions() { assertEquals("lru", flagdOptions.getCacheType()); assertEquals(100, flagdOptions.getMaxCacheSize()); assertEquals("app=weatherApp", flagdOptions.getSelector()); - assertEquals("test/provider/id_1", flagdOptions.getProviderId()); + assertEquals("test/provider/id_1", flagdOptions.getProviderID()); assertEquals(openTelemetry, flagdOptions.getOpenTelemetry()); assertEquals(connector, flagdOptions.getCustomConnector()); assertEquals(Resolver.IN_PROCESS, flagdOptions.getResolverType()); From 7e47525c3b40a2ab9f0ace89f53a5489d4f6c13d Mon Sep 17 00:00:00 2001 From: Maks Osowski Date: Wed, 5 Mar 2025 17:39:26 +0100 Subject: [PATCH 3/3] Revert "chore(flagd): Capitalize ID in providerID, for consistency with Go" This reverts commit d11e4a918391f9f361b85c10902f0f2a20fa4895. Signed-off-by: Maks Osowski --- providers/flagd/README.md | 2 +- .../contrib/providers/flagd/FlagdOptions.java | 4 ++-- .../storage/connector/grpc/GrpcStreamConnector.java | 10 +++++----- .../contrib/providers/flagd/FlagdOptionsTest.java | 6 +++--- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/providers/flagd/README.md b/providers/flagd/README.md index 7051ba93d..681c0bf93 100644 --- a/providers/flagd/README.md +++ b/providers/flagd/README.md @@ -116,7 +116,7 @@ Given below are the supported configurations: | streamDeadlineMs | FLAGD_STREAM_DEADLINE_MS | int | 600000 | rpc & in-process | | keepAliveTime | FLAGD_KEEP_ALIVE_TIME_MS | long | 0 | rpc & in-process | | selector | FLAGD_SOURCE_SELECTOR | String | null | in-process | -| providerID | FLAGD_SOURCE_PROVIDER_ID | String | null | in-process | +| providerId | FLAGD_SOURCE_PROVIDER_ID | String | null | in-process | | cache | FLAGD_CACHE | String - lru, disabled | lru | rpc | | maxCacheSize | FLAGD_MAX_CACHE_SIZE | int | 1000 | rpc | | maxEventStreamRetries | FLAGD_MAX_EVENT_STREAM_RETRIES | int | 5 | rpc | diff --git a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/FlagdOptions.java b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/FlagdOptions.java index 8a30744b4..fa986122d 100644 --- a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/FlagdOptions.java +++ b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/FlagdOptions.java @@ -108,10 +108,10 @@ public class FlagdOptions { private String selector = fallBackToEnvOrDefault(Config.SOURCE_SELECTOR_ENV_VAR_NAME, null); /** - * ProviderID to be used with flag sync gRPC contract. + * ProviderId to be used with flag sync gRPC contract. **/ @Builder.Default - private String providerID = fallBackToEnvOrDefault(Config.SOURCE_PROVIDER_ID_ENV_VAR_NAME, null); + private String providerId = fallBackToEnvOrDefault(Config.SOURCE_PROVIDER_ID_ENV_VAR_NAME, null); /** * gRPC client KeepAlive in milliseconds. Disabled with 0. diff --git a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/storage/connector/grpc/GrpcStreamConnector.java b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/storage/connector/grpc/GrpcStreamConnector.java index b613e9b71..0445efd8d 100644 --- a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/storage/connector/grpc/GrpcStreamConnector.java +++ b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/storage/connector/grpc/GrpcStreamConnector.java @@ -34,7 +34,7 @@ public class GrpcStreamConnector implements Connector { private final BlockingQueue blockingQueue = new LinkedBlockingQueue<>(QUEUE_SIZE); private final int deadline; private final String selector; - private final String providerID; + private final String providerId; private final GrpcConnector< FlagSyncServiceGrpc.FlagSyncServiceStub, FlagSyncServiceGrpc.FlagSyncServiceBlockingStub> grpcConnector; @@ -46,7 +46,7 @@ public class GrpcStreamConnector implements Connector { public GrpcStreamConnector(final FlagdOptions options, Consumer onConnectionEvent) { deadline = options.getDeadline(); selector = options.getSelector(); - providerID = options.getProviderID(); + providerId = options.getProviderId(); streamReceiver = new LinkedBlockingQueue<>(QUEUE_SIZE); grpcConnector = new GrpcConnector<>( options, @@ -55,14 +55,14 @@ public GrpcStreamConnector(final FlagdOptions options, Consumer { String localSelector = selector; - String localProviderID = providerID; + String localProviderId = providerId; final SyncFlagsRequest.Builder syncRequest = SyncFlagsRequest.newBuilder(); if (localSelector != null) { syncRequest.setSelector(localSelector); } - if (localProviderID != null) { - syncRequest.setProviderId(localProviderID); + if (localProviderId != null) { + syncRequest.setProviderId(localProviderId); } stub.syncFlags(syncRequest.build(), new GrpcStreamHandler(streamReceiver)); diff --git a/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/FlagdOptionsTest.java b/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/FlagdOptionsTest.java index 2f8789ae5..616b0b479 100644 --- a/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/FlagdOptionsTest.java +++ b/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/FlagdOptionsTest.java @@ -41,7 +41,7 @@ void TestDefaults() { assertEquals(DEFAULT_CACHE, builder.getCacheType()); assertEquals(DEFAULT_MAX_CACHE_SIZE, builder.getMaxCacheSize()); assertNull(builder.getSelector()); - assertNull(builder.getProviderID()); + assertNull(builder.getProviderId()); assertNull(builder.getOpenTelemetry()); assertNull(builder.getCustomConnector()); assertNull(builder.getOfflineFlagSourcePath()); @@ -62,7 +62,7 @@ void TestBuilderOptions() { .cacheType("lru") .maxCacheSize(100) .selector("app=weatherApp") - .providerID("test/provider/id_1") + .providerId("test/provider/id_1") .openTelemetry(openTelemetry) .customConnector(connector) .resolverType(Resolver.IN_PROCESS) @@ -77,7 +77,7 @@ void TestBuilderOptions() { assertEquals("lru", flagdOptions.getCacheType()); assertEquals(100, flagdOptions.getMaxCacheSize()); assertEquals("app=weatherApp", flagdOptions.getSelector()); - assertEquals("test/provider/id_1", flagdOptions.getProviderID()); + assertEquals("test/provider/id_1", flagdOptions.getProviderId()); assertEquals(openTelemetry, flagdOptions.getOpenTelemetry()); assertEquals(connector, flagdOptions.getCustomConnector()); assertEquals(Resolver.IN_PROCESS, flagdOptions.getResolverType());