Skip to content
Merged
42 changes: 21 additions & 21 deletions providers/flagd/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -106,27 +106,27 @@ variables.

Given below are the supported configurations:

| Option name | Environment variable name | Type & Values | Default | Compatible resolver |
|-----------------------|--------------------------------|--------------------------|-----------|-------------------------|
| resolver | FLAGD_RESOLVER | String - rpc, in-process | rpc | |
| host | FLAGD_HOST | String | localhost | rpc & in-process |
| port | FLAGD_PORT | int | 8013 | rpc & in-process |
| targetUri | FLAGD_TARGET_URI | string | null | rpc & in-process |
| tls | FLAGD_TLS | boolean | false | rpc & in-process |
| defaultAuthority | FLAGD_DEFAULT_AUTHORITY | String | null | rpc & in-process |
| socketPath | FLAGD_SOCKET_PATH | String | null | rpc & in-process |
| certPath | FLAGD_SERVER_CERT_PATH | String | null | rpc & in-process |
| deadline | FLAGD_DEADLINE_MS | int | 500 | rpc & in-process & file |
| 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 |
| retryBackoffMs | FLAGD_RETRY_BACKOFF_MS | int | 1000 | rpc |
| offlineFlagSourcePath | FLAGD_OFFLINE_FLAG_SOURCE_PATH | String | null | file |
| offlinePollIntervalMs | FLAGD_OFFLINE_POLL_MS | int | 5000 | file |
| Option name | Environment variable name | Type & Values | Default | Compatible resolver |
|-----------------------|------------------------------------------------------------------------|--------------------------|-------------------------------|-------------------------|
| resolver | FLAGD_RESOLVER | String - rpc, in-process | rpc | |
| host | FLAGD_HOST | String | localhost | rpc & in-process |
| port | FLAGD_PORT (rpc), FLAGD_SYNC_PORT (in-process, FLAGD_PORT as fallback) | int | 8013 (rpc), 8015 (in-process) | rpc & in-process |
| targetUri | FLAGD_TARGET_URI | string | null | rpc & in-process |
| tls | FLAGD_TLS | boolean | false | rpc & in-process |
| defaultAuthority | FLAGD_DEFAULT_AUTHORITY | String | null | rpc & in-process |
| socketPath | FLAGD_SOCKET_PATH | String | null | rpc & in-process |
| certPath | FLAGD_SERVER_CERT_PATH | String | null | rpc & in-process |
| deadline | FLAGD_DEADLINE_MS | int | 500 | rpc & in-process & file |
| 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 |
| retryBackoffMs | FLAGD_RETRY_BACKOFF_MS | int | 1000 | rpc |
| offlineFlagSourcePath | FLAGD_OFFLINE_FLAG_SOURCE_PATH | String | null | file |
| offlinePollIntervalMs | FLAGD_OFFLINE_POLL_MS | int | 5000 | file |

> [!NOTE]
> Some configurations are only applicable for RPC resolver.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ public final class Config {
static final String RESOLVER_ENV_VAR = "FLAGD_RESOLVER";
static final String HOST_ENV_VAR_NAME = "FLAGD_HOST";
static final String PORT_ENV_VAR_NAME = "FLAGD_PORT";
static final String SYNC_PORT_ENV_VAR_NAME = "FLAGD_SYNC_PORT";
static final String TLS_ENV_VAR_NAME = "FLAGD_TLS";
static final String DEFAULT_AUTHORITY_ENV_VAR_NAME = "FLAGD_DEFAULT_AUTHORITY";
static final String SOCKET_PATH_ENV_VAR_NAME = "FLAGD_SOCKET_PATH";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -254,8 +254,14 @@ void prebuild() {
}

if (port == 0 && resolverType != Config.Resolver.FILE) {
port = Integer.parseInt(
fallBackToEnvOrDefault(Config.PORT_ENV_VAR_NAME, determineDefaultPortForResolver()));
String defaultPort = determineDefaultPortForResolver();
String fromPortEnv = fallBackToEnvOrDefault(Config.PORT_ENV_VAR_NAME, defaultPort);

String portValue = resolverType == Config.Resolver.IN_PROCESS
? fallBackToEnvOrDefault(Config.SYNC_PORT_ENV_VAR_NAME, fromPortEnv)
: fromPortEnv;

port = Integer.parseInt(portValue);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,11 @@
import static dev.openfeature.contrib.providers.flagd.Config.DEFAULT_RPC_PORT;
import static dev.openfeature.contrib.providers.flagd.Config.KEEP_ALIVE_MS_ENV_VAR_NAME;
import static dev.openfeature.contrib.providers.flagd.Config.KEEP_ALIVE_MS_ENV_VAR_NAME_OLD;
import static dev.openfeature.contrib.providers.flagd.Config.PORT_ENV_VAR_NAME;
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.SYNC_PORT_ENV_VAR_NAME;
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;
Expand Down Expand Up @@ -201,6 +203,37 @@ void testInProcessProviderFromEnv_portConfigured_usesConfiguredPort() {
assertThat(flagdOptions.getPort()).isEqualTo(1000);
}

@Test
@SetEnvironmentVariable(key = RESOLVER_ENV_VAR, value = RESOLVER_IN_PROCESS)
@SetEnvironmentVariable(key = SYNC_PORT_ENV_VAR_NAME, value = "9999")
void testInProcessProvider_usesSyncPortEnvVarWhenSet() {
FlagdOptions flagdOptions = FlagdOptions.builder().build();

assertThat(flagdOptions.getResolverType()).isEqualTo(Resolver.IN_PROCESS);
assertThat(flagdOptions.getPort()).isEqualTo(9999);
}

@Test
@SetEnvironmentVariable(key = RESOLVER_ENV_VAR, value = RESOLVER_IN_PROCESS)
@SetEnvironmentVariable(key = PORT_ENV_VAR_NAME, value = "8888")
void testInProcessProvider_fallsBackToFlagdPortWhenSyncPortNotSet() {
FlagdOptions flagdOptions = FlagdOptions.builder().build();

assertThat(flagdOptions.getResolverType()).isEqualTo(Resolver.IN_PROCESS);
assertThat(flagdOptions.getPort()).isEqualTo(8888);
}

@Test
@SetEnvironmentVariable(key = RESOLVER_ENV_VAR, value = RESOLVER_IN_PROCESS)
@SetEnvironmentVariable(key = PORT_ENV_VAR_NAME, value = "8888")
@SetEnvironmentVariable(key = SYNC_PORT_ENV_VAR_NAME, value = "9999")
void testInProcessProvider_syncPortTakesPrecedenceOverFlagdPort() {
FlagdOptions flagdOptions = FlagdOptions.builder().build();

assertThat(flagdOptions.getResolverType()).isEqualTo(Resolver.IN_PROCESS);
assertThat(flagdOptions.getPort()).isEqualTo(9999);
}

@Test
@SetEnvironmentVariable(key = RESOLVER_ENV_VAR, value = RESOLVER_RPC)
void testRpcProviderFromEnv_noPortConfigured_defaultsToCorrectPort() {
Expand Down