From 621309ab75294b37b2a788324bbbe3abc403c694 Mon Sep 17 00:00:00 2001 From: Nikita Koksharov Date: Mon, 20 Jul 2020 08:34:10 +0300 Subject: [PATCH] Fixed - Spring Data Redis connection in multi mode causes connection leak if it wasn't executed during RedisTemplate execution #2928 --- .../spring/data/connection/RedissonConnection.java | 8 +++++++- .../spring/data/connection/RedissonConnection.java | 6 ++++++ .../spring/data/connection/RedissonConnection.java | 6 ++++++ .../spring/data/connection/RedissonConnection.java | 6 ++++++ .../spring/data/connection/RedissonConnection.java | 6 ++++++ .../spring/data/connection/RedissonConnection.java | 6 ++++++ .../spring/data/connection/RedissonConnection.java | 6 ++++++ .../org/redisson/command/RedisQueuedBatchExecutor.java | 3 +++ 8 files changed, 46 insertions(+), 1 deletion(-) diff --git a/redisson-spring-data/redisson-spring-data-16/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java b/redisson-spring-data/redisson-spring-data-16/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java index 5d90b4ea4..b3633e9fc 100644 --- a/redisson-spring-data/redisson-spring-data-16/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java +++ b/redisson-spring-data/redisson-spring-data-16/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java @@ -80,7 +80,13 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public void close() throws DataAccessException { super.close(); - + + if (isQueueing()) { + CommandBatchService es = (CommandBatchService) executorService; + if (!es.isExecuted()) { + discard(); + } + } closed = true; } diff --git a/redisson-spring-data/redisson-spring-data-17/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java b/redisson-spring-data/redisson-spring-data-17/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java index 4777cad79..8e0db80ec 100644 --- a/redisson-spring-data/redisson-spring-data-17/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java +++ b/redisson-spring-data/redisson-spring-data-17/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java @@ -111,6 +111,12 @@ public class RedissonConnection extends AbstractRedisConnection { public void close() throws DataAccessException { super.close(); + if (isQueueing()) { + CommandBatchService es = (CommandBatchService) executorService; + if (!es.isExecuted()) { + discard(); + } + } closed = true; } diff --git a/redisson-spring-data/redisson-spring-data-18/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java b/redisson-spring-data/redisson-spring-data-18/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java index a2afbf13e..78dbbd142 100644 --- a/redisson-spring-data/redisson-spring-data-18/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java +++ b/redisson-spring-data/redisson-spring-data-18/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java @@ -117,6 +117,12 @@ public class RedissonConnection extends AbstractRedisConnection { public void close() throws DataAccessException { super.close(); + if (isQueueing()) { + CommandBatchService es = (CommandBatchService) executorService; + if (!es.isExecuted()) { + discard(); + } + } closed = true; } diff --git a/redisson-spring-data/redisson-spring-data-20/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java b/redisson-spring-data/redisson-spring-data-20/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java index 5d459773c..a89fbe582 100644 --- a/redisson-spring-data/redisson-spring-data-20/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java +++ b/redisson-spring-data/redisson-spring-data-20/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java @@ -85,6 +85,12 @@ public class RedissonConnection extends AbstractRedisConnection { public void close() throws DataAccessException { super.close(); + if (isQueueing()) { + CommandBatchService es = (CommandBatchService) executorService; + if (!es.isExecuted()) { + discard(); + } + } closed = true; } diff --git a/redisson-spring-data/redisson-spring-data-21/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java b/redisson-spring-data/redisson-spring-data-21/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java index 634d4b467..35b791f7c 100644 --- a/redisson-spring-data/redisson-spring-data-21/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java +++ b/redisson-spring-data/redisson-spring-data-21/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java @@ -115,6 +115,12 @@ public class RedissonConnection extends AbstractRedisConnection { public void close() throws DataAccessException { super.close(); + if (isQueueing()) { + CommandBatchService es = (CommandBatchService) executorService; + if (!es.isExecuted()) { + discard(); + } + } closed = true; } diff --git a/redisson-spring-data/redisson-spring-data-22/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java b/redisson-spring-data/redisson-spring-data-22/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java index d5a03691e..d4d9aed5f 100644 --- a/redisson-spring-data/redisson-spring-data-22/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java +++ b/redisson-spring-data/redisson-spring-data-22/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java @@ -107,6 +107,12 @@ public class RedissonConnection extends AbstractRedisConnection { public void close() throws DataAccessException { super.close(); + if (isQueueing()) { + CommandBatchService es = (CommandBatchService) executorService; + if (!es.isExecuted()) { + discard(); + } + } closed = true; } diff --git a/redisson-spring-data/redisson-spring-data-23/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java b/redisson-spring-data/redisson-spring-data-23/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java index d5a03691e..d4d9aed5f 100644 --- a/redisson-spring-data/redisson-spring-data-23/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java +++ b/redisson-spring-data/redisson-spring-data-23/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java @@ -107,6 +107,12 @@ public class RedissonConnection extends AbstractRedisConnection { public void close() throws DataAccessException { super.close(); + if (isQueueing()) { + CommandBatchService es = (CommandBatchService) executorService; + if (!es.isExecuted()) { + discard(); + } + } closed = true; } diff --git a/redisson/src/main/java/org/redisson/command/RedisQueuedBatchExecutor.java b/redisson/src/main/java/org/redisson/command/RedisQueuedBatchExecutor.java index 83026fb24..14bbe1829 100644 --- a/redisson/src/main/java/org/redisson/command/RedisQueuedBatchExecutor.java +++ b/redisson/src/main/java/org/redisson/command/RedisQueuedBatchExecutor.java @@ -85,6 +85,9 @@ public class RedisQueuedBatchExecutor extends BaseRedisBatchExecutor if (RedisCommands.EXEC.getName().equals(command.getName())) { super.releaseConnection(attemptPromise, connectionFuture); } + if (RedisCommands.DISCARD.getName().equals(command.getName())) { + super.releaseConnection(attemptPromise, connectionFuture); + } } @Override