From 0bc90c81086102a6066b0c6579529d9d6f337847 Mon Sep 17 00:00:00 2001 From: Nikita Koksharov Date: Wed, 17 Apr 2024 07:57:19 +0300 Subject: [PATCH] Fixed - TimeoutException is thrown if connectionMinimumIdleSize = 0. #5788 --- .../connection/MasterSlaveConnectionManager.java | 12 ++++++++++-- .../src/test/java/org/redisson/RedissonTest.java | 9 +++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java b/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java index d4d752823..7a53a05de 100644 --- a/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java +++ b/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java @@ -222,7 +222,11 @@ public class MasterSlaveConnectionManager implements ConnectionManager { String hostname = hostnameMapper.apply(uri); CompletableFuture masterFuture = masterSlaveEntry.setupMasterEntry(uri, hostname); try { - masterFuture.get(config.getConnectTimeout()*config.getMasterConnectionMinimumIdleSize(), TimeUnit.MILLISECONDS); + if (config.getMasterConnectionMinimumIdleSize() == 0) { + masterFuture.join(); + } else { + masterFuture.get(config.getConnectTimeout()*config.getMasterConnectionMinimumIdleSize(), TimeUnit.MILLISECONDS); + } } catch (InterruptedException e) { Thread.currentThread().interrupt(); } catch (ExecutionException | TimeoutException e) { @@ -232,7 +236,11 @@ public class MasterSlaveConnectionManager implements ConnectionManager { if (!config.isSlaveNotUsed()) { CompletableFuture fs = masterSlaveEntry.initSlaveBalancer(disconnectedSlaves, hostnameMapper); try { - fs.get(config.getConnectTimeout()*config.getSlaveConnectionMinimumIdleSize(), TimeUnit.MILLISECONDS); + if (config.getSlaveConnectionMinimumIdleSize() == 0) { + fs.join(); + } else { + fs.get(config.getConnectTimeout()*config.getSlaveConnectionMinimumIdleSize(), TimeUnit.MILLISECONDS); + } } catch (InterruptedException e) { Thread.currentThread().interrupt(); } catch (ExecutionException | TimeoutException e) { diff --git a/redisson/src/test/java/org/redisson/RedissonTest.java b/redisson/src/test/java/org/redisson/RedissonTest.java index 786d7a1ac..aafe11691 100644 --- a/redisson/src/test/java/org/redisson/RedissonTest.java +++ b/redisson/src/test/java/org/redisson/RedissonTest.java @@ -50,6 +50,15 @@ import static org.awaitility.Awaitility.await; public class RedissonTest extends RedisDockerTest { + @Test + public void testZeroMinimumIdleSize() { + Config c = redisson.getConfig(); + c.useSingleServer().setConnectionMinimumIdleSize(0); + + RedissonClient r = Redisson.create(c); + r.shutdown(); + } + @Test public void testVirtualThreads() { Config c = redisson.getConfig();