From bdb840e5dc82e747ee5be2d973949c75f977fd41 Mon Sep 17 00:00:00 2001 From: Thach Le Date: Mon, 22 Jul 2024 21:45:57 +0700 Subject: [PATCH 1/4] Default ClientOptions.timeoutOptions to TimeoutOptions.enabled() --- src/main/java/io/lettuce/core/ClientOptions.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/lettuce/core/ClientOptions.java b/src/main/java/io/lettuce/core/ClientOptions.java index aa3d2ba18..3e32967bf 100644 --- a/src/main/java/io/lettuce/core/ClientOptions.java +++ b/src/main/java/io/lettuce/core/ClientOptions.java @@ -67,7 +67,7 @@ public class ClientOptions implements Serializable { public static final boolean DEFAULT_SUSPEND_RECONNECT_PROTO_FAIL = false; - public static final TimeoutOptions DEFAULT_TIMEOUT_OPTIONS = TimeoutOptions.create(); + public static final TimeoutOptions DEFAULT_TIMEOUT_OPTIONS = TimeoutOptions.enabled(); private final boolean autoReconnect; From db0f70cb9476a5462ef6b9963adba9cf3f3aa7d2 Mon Sep 17 00:00:00 2001 From: Thach Le Date: Fri, 9 Aug 2024 14:30:00 +0700 Subject: [PATCH 2/4] Update ConnectionFailureIntegrationTests --- .../ConnectionFailureIntegrationTests.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/test/java/io/lettuce/core/protocol/ConnectionFailureIntegrationTests.java b/src/test/java/io/lettuce/core/protocol/ConnectionFailureIntegrationTests.java index 38f759c37..d2f720d3f 100644 --- a/src/test/java/io/lettuce/core/protocol/ConnectionFailureIntegrationTests.java +++ b/src/test/java/io/lettuce/core/protocol/ConnectionFailureIntegrationTests.java @@ -89,7 +89,8 @@ void invalidFirstByte() throws Exception { @Test void failOnReconnect() throws Exception { - ClientOptions clientOptions = ClientOptions.builder().suspendReconnectOnProtocolFailure(true).build(); + ClientOptions clientOptions = ClientOptions.builder().suspendReconnectOnProtocolFailure(true) + .timeoutOptions(TimeoutOptions.builder().timeoutCommands(false).build()).build(); client.setOptions(clientOptions); RandomResponseServer ts = getRandomResponseServer(); @@ -133,7 +134,8 @@ void failOnReconnect() throws Exception { @Test void failOnReconnectShouldSendEvents() throws Exception { - client.setOptions(ClientOptions.builder().suspendReconnectOnProtocolFailure(false).build()); + client.setOptions(ClientOptions.builder().suspendReconnectOnProtocolFailure(false) + .timeoutOptions(TimeoutOptions.builder().timeoutCommands(false).build()).build()); RandomResponseServer ts = getRandomResponseServer(); @@ -181,7 +183,8 @@ void failOnReconnectShouldSendEvents() throws Exception { @Test void cancelCommandsOnReconnectFailure() throws Exception { - client.setOptions(ClientOptions.builder().cancelCommandsOnReconnectFailure(true).build()); + client.setOptions(ClientOptions.builder().cancelCommandsOnReconnectFailure(true) + .timeoutOptions(TimeoutOptions.builder().timeoutCommands(false).build()).build()); RandomResponseServer ts = getRandomResponseServer(); @@ -235,7 +238,8 @@ void emitEventOnReconnectFailure() throws Exception { RedisURI redisUri = RedisURI.create(defaultRedisUri.toURI()); RedisClient client = RedisClient.create(clientResources); - client.setOptions(ClientOptions.builder().build()); + client.setOptions( + ClientOptions.builder().timeoutOptions(TimeoutOptions.builder().timeoutCommands(false).build()).build()); try { RedisAsyncCommandsImpl connection = (RedisAsyncCommandsImpl) client @@ -329,7 +333,8 @@ public void afterChannelInitialized(Channel channel) { RedisURI redisUri = RedisURI.create(TestSettings.host(), TestSettings.port()); RedisClient client = RedisClient.create(clientResources, redisUri); - client.setOptions(ClientOptions.builder().pingBeforeActivateConnection(true).build()); + client.setOptions(ClientOptions.builder().pingBeforeActivateConnection(true) + .timeoutOptions(TimeoutOptions.builder().timeoutCommands(false).build()).build()); StatefulRedisConnection connection = client.connect(); @@ -365,6 +370,8 @@ public void afterChannelInitialized(Channel channel) { void closingDisconnectedConnectionShouldDisableConnectionWatchdog() { client.setOptions(ClientOptions.create()); + client.setOptions( + ClientOptions.builder().timeoutOptions(TimeoutOptions.builder().timeoutCommands(false).build()).build()); RedisURI redisUri = RedisURI.Builder.redis(TestSettings.host(), TestSettings.port()).withTimeout(Duration.ofMinutes(10)) .build(); From 6b172a432b85131103bbcb4db212d56fd22c0aaf Mon Sep 17 00:00:00 2001 From: Thach Le Date: Fri, 9 Aug 2024 15:21:59 +0700 Subject: [PATCH 3/4] Update ClientOptionsIntegrationTests, RedisClusterSetupTest, AtMostOneceTest --- .../core/ClientOptionsIntegrationTests.java | 29 ++++++++++++------- .../core/cluster/RedisClusterSetupTest.java | 15 ++++++---- .../core/reliability/AtMostOnceTest.java | 4 ++- 3 files changed, 32 insertions(+), 16 deletions(-) diff --git a/src/test/java/io/lettuce/core/ClientOptionsIntegrationTests.java b/src/test/java/io/lettuce/core/ClientOptionsIntegrationTests.java index 347ec18e9..8ca4c896e 100644 --- a/src/test/java/io/lettuce/core/ClientOptionsIntegrationTests.java +++ b/src/test/java/io/lettuce/core/ClientOptionsIntegrationTests.java @@ -92,7 +92,8 @@ void variousClientOptions() { @Test void requestQueueSize() { - client.setOptions(ClientOptions.builder().requestQueueSize(10).build()); + client.setOptions(ClientOptions.builder().requestQueueSize(10) + .timeoutOptions(TimeoutOptions.builder().timeoutCommands(false).build()).build()); StatefulRedisConnection connection = client.connect(); getConnectionWatchdog(connection).setListenOnChannelInactive(false); @@ -115,7 +116,8 @@ void requestQueueSize() { @Test void requestQueueSizeAppliedForReconnect() { - client.setOptions(ClientOptions.builder().requestQueueSize(10).build()); + client.setOptions(ClientOptions.builder().requestQueueSize(10) + .timeoutOptions(TimeoutOptions.builder().timeoutCommands(false).build()).build()); RedisAsyncCommands connection = client.connect().async(); testHitRequestQueueLimit(connection); @@ -127,7 +129,7 @@ void testHitRequestQueueLimitReconnectWithAuthCommand() { WithPassword.run(client, () -> { client.setOptions(ClientOptions.builder().protocolVersion(ProtocolVersion.RESP2).pingBeforeActivateConnection(false) - .requestQueueSize(10).build()); + .requestQueueSize(10).timeoutOptions(TimeoutOptions.builder().timeoutCommands(false).build()).build()); RedisAsyncCommands connection = client.connect().async(); connection.auth(passwd); @@ -142,7 +144,7 @@ void testHitRequestQueueLimitReconnectWithAuthUsernamePasswordCommand() { WithPassword.run(client, () -> { client.setOptions(ClientOptions.builder().protocolVersion(ProtocolVersion.RESP2).pingBeforeActivateConnection(false) - .requestQueueSize(10).build()); + .requestQueueSize(10).timeoutOptions(TimeoutOptions.builder().timeoutCommands(false).build()).build()); RedisAsyncCommands connection = client.connect().async(); connection.auth(username, passwd); @@ -154,7 +156,9 @@ void testHitRequestQueueLimitReconnectWithAuthUsernamePasswordCommand() { void testHitRequestQueueLimitReconnectWithUriAuth() { WithPassword.run(client, () -> { - client.setOptions(ClientOptions.builder().requestQueueSize(10).build()); + client.setOptions(ClientOptions.builder().requestQueueSize(10) + .timeoutOptions(TimeoutOptions.builder().timeoutCommands(false).build()).build()); + ; RedisURI redisURI = RedisURI.create(host, port); redisURI.setPassword(passwd); @@ -169,7 +173,8 @@ void testHitRequestQueueLimitReconnectWithUriAuthPingCommand() { WithPassword.run(client, () -> { - client.setOptions(ClientOptions.builder().requestQueueSize(10).build()); + client.setOptions(ClientOptions.builder().requestQueueSize(10) + .timeoutOptions(TimeoutOptions.builder().timeoutCommands(false).build()).build()); RedisURI redisURI = RedisURI.create(host, port); redisURI.setPassword(passwd); @@ -207,7 +212,8 @@ private void testHitRequestQueueLimit(RedisAsyncCommands connect @Test void requestQueueSizeOvercommittedReconnect() { - client.setOptions(ClientOptions.builder().requestQueueSize(10).build()); + client.setOptions(ClientOptions.builder().requestQueueSize(10) + .timeoutOptions(TimeoutOptions.builder().timeoutCommands(false).build()).build()); StatefulRedisConnection connection = client.connect(); ConnectionWatchdog watchdog = getConnectionWatchdog(connection); @@ -262,8 +268,8 @@ void disconnectedWithoutReconnect() { @Test void disconnectedRejectCommands() { - client.setOptions( - ClientOptions.builder().disconnectedBehavior(ClientOptions.DisconnectedBehavior.REJECT_COMMANDS).build()); + client.setOptions(ClientOptions.builder().disconnectedBehavior(ClientOptions.DisconnectedBehavior.REJECT_COMMANDS) + .timeoutOptions(TimeoutOptions.builder().timeoutCommands(false).build()).build()); RedisAsyncCommands connection = client.connect().async(); @@ -471,7 +477,8 @@ void timeoutExpiresBatchedCommands() { @Test void pingBeforeConnectWithQueuedCommandsAndReconnect() throws Exception { - + client.setOptions( + ClientOptions.builder().timeoutOptions(TimeoutOptions.builder().timeoutCommands(false).build()).build()); StatefulRedisConnection controlConnection = client.connect(); StatefulRedisConnection redisConnection = client.connect(RedisURI.create("redis://localhost:6479/5")); @@ -513,6 +520,8 @@ void authenticatedPingBeforeConnectWithQueuedCommandsAndReconnect() { WithPassword.run(client, () -> { RedisURI redisURI = RedisURI.Builder.redis(host, port).withPassword(passwd).withDatabase(5).build(); + client.setOptions( + ClientOptions.builder().timeoutOptions(TimeoutOptions.builder().timeoutCommands(false).build()).build()); StatefulRedisConnection controlConnection = client.connect(redisURI); StatefulRedisConnection redisConnection = client.connect(redisURI); diff --git a/src/test/java/io/lettuce/core/cluster/RedisClusterSetupTest.java b/src/test/java/io/lettuce/core/cluster/RedisClusterSetupTest.java index ce956e0de..14e7a4bed 100644 --- a/src/test/java/io/lettuce/core/cluster/RedisClusterSetupTest.java +++ b/src/test/java/io/lettuce/core/cluster/RedisClusterSetupTest.java @@ -31,6 +31,7 @@ import java.util.function.Supplier; import java.util.stream.Collectors; +import io.lettuce.core.TimeoutOptions; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeAll; @@ -303,10 +304,12 @@ public void slotMigrationShouldUseAsking() { public void disconnectedConnectionRejectTest() throws Exception { clusterClient.setOptions(ClusterClientOptions.builder().topologyRefreshOptions(PERIODIC_REFRESH_ENABLED) - .disconnectedBehavior(ClientOptions.DisconnectedBehavior.REJECT_COMMANDS).build()); + .disconnectedBehavior(ClientOptions.DisconnectedBehavior.REJECT_COMMANDS) + .timeoutOptions(TimeoutOptions.builder().timeoutCommands(false).build()).build()); RedisAdvancedClusterAsyncCommands clusterConnection = clusterClient.connect().async(); - clusterClient.setOptions(ClusterClientOptions.builder() - .disconnectedBehavior(ClientOptions.DisconnectedBehavior.REJECT_COMMANDS).build()); + clusterClient.setOptions( + ClusterClientOptions.builder().disconnectedBehavior(ClientOptions.DisconnectedBehavior.REJECT_COMMANDS) + .timeoutOptions(TimeoutOptions.builder().timeoutCommands(false).build()).build()); ClusterSetup.setup2Masters(clusterHelper); assertRoutedExecution(clusterConnection); @@ -330,9 +333,11 @@ public void disconnectedConnectionRejectTest() throws Exception { @Test public void atLeastOnceForgetNodeFailover() throws Exception { - clusterClient.setOptions(ClusterClientOptions.builder().topologyRefreshOptions(PERIODIC_REFRESH_ENABLED).build()); + clusterClient.setOptions(ClusterClientOptions.builder().topologyRefreshOptions(PERIODIC_REFRESH_ENABLED) + .timeoutOptions(TimeoutOptions.builder().timeoutCommands(false).build()).build()); RedisAdvancedClusterAsyncCommands clusterConnection = clusterClient.connect().async(); - clusterClient.setOptions(ClusterClientOptions.create()); + clusterClient.setOptions( + ClusterClientOptions.builder().timeoutOptions(TimeoutOptions.builder().timeoutCommands(false).build()).build()); ClusterSetup.setup2Masters(clusterHelper); assertRoutedExecution(clusterConnection); diff --git a/src/test/java/io/lettuce/core/reliability/AtMostOnceTest.java b/src/test/java/io/lettuce/core/reliability/AtMostOnceTest.java index 7963d5a98..4bc3406c0 100644 --- a/src/test/java/io/lettuce/core/reliability/AtMostOnceTest.java +++ b/src/test/java/io/lettuce/core/reliability/AtMostOnceTest.java @@ -9,6 +9,7 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; +import io.lettuce.core.TimeoutOptions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -46,7 +47,8 @@ class AtMostOnceTest extends AbstractRedisClientTest { @BeforeEach void before() { - client.setOptions(ClientOptions.builder().autoReconnect(false).build()); + client.setOptions(ClientOptions.builder().autoReconnect(false) + .timeoutOptions(TimeoutOptions.builder().timeoutCommands(false).build()).build()); // needs to be increased on slow systems...perhaps... client.setDefaultTimeout(3, TimeUnit.SECONDS); From 0da6611ae87ffa9d595918f336cd5bbbc4e04b01 Mon Sep 17 00:00:00 2001 From: Thach Le Date: Fri, 9 Aug 2024 15:33:54 +0700 Subject: [PATCH 4/4] Update AtLeastOnceTest --- .../java/io/lettuce/core/reliability/AtLeastOnceTest.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/test/java/io/lettuce/core/reliability/AtLeastOnceTest.java b/src/test/java/io/lettuce/core/reliability/AtLeastOnceTest.java index b29007505..9243d301d 100644 --- a/src/test/java/io/lettuce/core/reliability/AtLeastOnceTest.java +++ b/src/test/java/io/lettuce/core/reliability/AtLeastOnceTest.java @@ -8,6 +8,7 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; +import io.lettuce.core.TimeoutOptions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -44,7 +45,8 @@ class AtLeastOnceTest extends AbstractRedisClientTest { @BeforeEach void before() { - client.setOptions(ClientOptions.builder().autoReconnect(true).build()); + client.setOptions(ClientOptions.builder().autoReconnect(true) + .timeoutOptions(TimeoutOptions.builder().timeoutCommands(false).build()).build()); // needs to be increased on slow systems...perhaps... client.setDefaultTimeout(3, TimeUnit.SECONDS);