Skip to content

Commit 481fc52

Browse files
fix: use keepalive for TCP & use unit in env variable name
Signed-off-by: Alexandra Oberaigner <[email protected]>
1 parent 7b0cf34 commit 481fc52

File tree

5 files changed

+41
-12
lines changed

5 files changed

+41
-12
lines changed

providers/flagd/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ Given below are the supported configurations:
105105
| socketPath | FLAGD_SOCKET_PATH | String | null | rpc & in-process |
106106
| certPath | FLAGD_SERVER_CERT_PATH | String | null | rpc & in-process |
107107
| deadline | FLAGD_DEADLINE_MS | int | 500 | rpc & in-process |
108-
| keepAliveTime | FLAGD_KEEP_ALIVE_TIME | long | 0 | rpc & in-process |
108+
| keepAliveTime | FLAGD_KEEP_ALIVE_TIME_MS | long | 0 | rpc & in-process |
109109
| selector | FLAGD_SOURCE_SELECTOR | String | null | in-process |
110110
| cache | FLAGD_CACHE | String - lru, disabled | lru | rpc |
111111
| maxCacheSize | FLAGD_MAX_CACHE_SIZE | int | 1000 | rpc |

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ public final class Config {
3333
static final String DEADLINE_MS_ENV_VAR_NAME = "FLAGD_DEADLINE_MS";
3434
static final String SOURCE_SELECTOR_ENV_VAR_NAME = "FLAGD_SOURCE_SELECTOR";
3535
static final String OFFLINE_SOURCE_PATH = "FLAGD_OFFLINE_FLAG_SOURCE_PATH";
36-
static final String KEEP_ALIVE_ENV_VAR_NAME = "FLAGD_KEEP_ALIVE_TIME";
36+
static final String KEEP_ALIVE_MS_ENV_VAR_NAME_OLD = "FLAGD_KEEP_ALIVE_TIME";
37+
static final String KEEP_ALIVE_MS_ENV_VAR_NAME = "FLAGD_KEEP_ALIVE_TIME_MS";
3738

3839
static final String RESOLVER_RPC = "rpc";
3940
static final String RESOLVER_IN_PROCESS = "in-process";

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,8 @@ public class FlagdOptions {
9999
*
100100
**/
101101
@Builder.Default
102-
private long keepAlive = fallBackToEnvOrDefault(Config.KEEP_ALIVE_ENV_VAR_NAME, Config.DEFAULT_KEEP_ALIVE);
102+
private long keepAlive = fallBackToEnvOrDefault(Config.KEEP_ALIVE_MS_ENV_VAR_NAME,
103+
fallBackToEnvOrDefault(Config.KEEP_ALIVE_MS_ENV_VAR_NAME_OLD, Config.DEFAULT_KEEP_ALIVE));
103104

104105
/**
105106
* File source of flags to be used by offline mode.

providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/common/ChannelBuilder.java

+8-4
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@ private ChannelBuilder() {
2828
*/
2929
@SuppressFBWarnings(value = "PATH_TRAVERSAL_IN", justification = "certificate path is a user input")
3030
public static ManagedChannel nettyChannel(final FlagdOptions options) {
31+
32+
// keepAliveTime: Long.MAX_VALUE disables keepAlive; very small values are increased automatically
33+
long keepAliveMs = options.getKeepAlive() == 0 ? Long.MAX_VALUE : options.getKeepAlive();
34+
3135
// we have a socket path specified, build a channel with a unix socket
3236
if (options.getSocketPath() != null) {
3337
// check epoll availability
@@ -37,9 +41,7 @@ public static ManagedChannel nettyChannel(final FlagdOptions options) {
3741

3842
return NettyChannelBuilder
3943
.forAddress(new DomainSocketAddress(options.getSocketPath()))
40-
// keepAliveTime: Long.MAX_VALUE disables keepAlive; very small values are increased automatically
41-
.keepAliveTime(options.getKeepAlive() == 0 ? Long.MAX_VALUE : options.getKeepAlive(),
42-
TimeUnit.MILLISECONDS)
44+
.keepAliveTime(keepAliveMs, TimeUnit.MILLISECONDS)
4345
.eventLoopGroup(new EpollEventLoopGroup())
4446
.channelType(EpollDomainSocketChannel.class)
4547
.usePlaintext()
@@ -48,7 +50,9 @@ public static ManagedChannel nettyChannel(final FlagdOptions options) {
4850

4951
// build a TCP socket
5052
try {
51-
final NettyChannelBuilder builder = NettyChannelBuilder.forAddress(options.getHost(), options.getPort());
53+
final NettyChannelBuilder builder = NettyChannelBuilder
54+
.forAddress(options.getHost(), options.getPort())
55+
.keepAliveTime(keepAliveMs, TimeUnit.MILLISECONDS);
5256
if (options.isTls()) {
5357
SslContextBuilder sslContext = GrpcSslContexts.forClient();
5458

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

+28-5
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import dev.openfeature.contrib.providers.flagd.resolver.process.storage.MockConnector;
44
import dev.openfeature.contrib.providers.flagd.resolver.process.storage.connector.Connector;
55
import io.opentelemetry.api.OpenTelemetry;
6+
import org.junit.jupiter.api.Nested;
67
import org.junit.jupiter.api.Test;
78
import org.junitpioneer.jupiter.SetEnvironmentVariable;
89
import org.mockito.Mockito;
@@ -105,14 +106,36 @@ void testInProcessProviderFromEnv_noPortConfigured_defaultsToCorrectPort() {
105106
assertThat(flagdOptions.getPort()).isEqualTo(Integer.parseInt(DEFAULT_IN_PROCESS_PORT));
106107
}
107108

108-
@Test
109-
@SetEnvironmentVariable(key = KEEP_ALIVE_ENV_VAR_NAME, value = "1337")
110-
void testInProcessProviderFromEnv_keepAliveEnvSet_usesSet() {
111-
FlagdOptions flagdOptions = FlagdOptions.builder().build();
109+
@Nested
110+
class TestInProcessProviderFromEnv_keepAliveEnvSet {
111+
@Test
112+
@SetEnvironmentVariable(key = KEEP_ALIVE_MS_ENV_VAR_NAME, value = "1336")
113+
void usesSet() {
114+
FlagdOptions flagdOptions = FlagdOptions.builder().build();
115+
116+
assertThat(flagdOptions.getKeepAlive()).isEqualTo(1336);
117+
}
118+
119+
@Test
120+
@SetEnvironmentVariable(key = KEEP_ALIVE_MS_ENV_VAR_NAME_OLD, value = "1337")
121+
void usesSetOldName() {
122+
FlagdOptions flagdOptions = FlagdOptions.builder().build();
112123

113-
assertThat(flagdOptions.getKeepAlive()).isEqualTo(1337);
124+
assertThat(flagdOptions.getKeepAlive()).isEqualTo(1337);
125+
}
126+
127+
@Test
128+
@SetEnvironmentVariable(key = KEEP_ALIVE_MS_ENV_VAR_NAME_OLD, value = "2222")
129+
@SetEnvironmentVariable(key = KEEP_ALIVE_MS_ENV_VAR_NAME, value = "1338")
130+
void usesSetOldAndNewName() {
131+
FlagdOptions flagdOptions = FlagdOptions.builder().build();
132+
133+
assertThat(flagdOptions.getKeepAlive()).isEqualTo(1338);
134+
}
114135
}
115136

137+
138+
116139
@Test
117140
void testInProcessProvider_noPortConfigured_defaultsToCorrectPort() {
118141
FlagdOptions flagdOptions = FlagdOptions.builder()

0 commit comments

Comments
 (0)