Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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