From 0ea4dd851212bcf913fb8c6a3d4468980ce51356 Mon Sep 17 00:00:00 2001 From: Nikita Koksharov Date: Wed, 10 Apr 2024 14:35:54 +0300 Subject: [PATCH] fixed connection leak after refactoring --- .../org/redisson/connection/pool/ConnectionPool.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/redisson/src/main/java/org/redisson/connection/pool/ConnectionPool.java b/redisson/src/main/java/org/redisson/connection/pool/ConnectionPool.java index 2e8836514..673451093 100644 --- a/redisson/src/main/java/org/redisson/connection/pool/ConnectionPool.java +++ b/redisson/src/main/java/org/redisson/connection/pool/ConnectionPool.java @@ -110,7 +110,8 @@ abstract class ConnectionPool { protected final CompletableFuture acquireConnection(RedisCommand command, ClientConnectionsEntry entry, boolean trackChanges) { ConnectionsHolder handler = getConnectionHolder(entry, trackChanges); CompletableFuture result = handler.acquireConnection(command); - return result.whenComplete((r, e) -> { + CompletableFuture cancelableFuture = new CompletableFuture<>(); + result.whenComplete((r, e) -> { if (e != null) { if (entry.getNodeType() == NodeType.SLAVE) { entry.getClient().getConfig().getFailedNodeDetector().onConnectFailed(); @@ -118,6 +119,7 @@ abstract class ConnectionPool { masterSlaveEntry.shutdownAndReconnectAsync(entry.getClient(), e); } } + cancelableFuture.completeExceptionally(e); return; } @@ -126,7 +128,12 @@ abstract class ConnectionPool { if (entry.getNodeType() == NodeType.SLAVE) { entry.getClient().getConfig().getFailedNodeDetector().onConnectSuccessful(); } + + if (!cancelableFuture.complete(r)) { + entry.returnConnection(r); + } }); + return cancelableFuture; } private boolean isHealthy(ClientConnectionsEntry entry) {