From 7e5365a501b01775edc67a8a6471b817439ecd55 Mon Sep 17 00:00:00 2001 From: Nikita Koksharov Date: Mon, 13 Dec 2021 13:39:19 +0300 Subject: [PATCH] refactoring --- .../MasterSlaveConnectionManager.java | 20 ++++++++++--------- .../redisson/connection/MasterSlaveEntry.java | 14 ++++++------- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java b/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java index 73653a8c2..035eef478 100644 --- a/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java +++ b/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java @@ -34,6 +34,7 @@ import io.netty.util.Timer; import io.netty.util.TimerTask; import io.netty.util.*; import io.netty.util.concurrent.*; +import io.netty.util.concurrent.Future; import io.netty.util.internal.PlatformDependent; import org.redisson.ElementsSubscribeService; import org.redisson.Version; @@ -51,10 +52,7 @@ import org.slf4j.LoggerFactory; import java.net.InetSocketAddress; import java.util.*; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.TimeUnit; +import java.util.concurrent.*; import java.util.stream.Collectors; /** @@ -598,13 +596,17 @@ public class MasterSlaveConnectionManager implements ConnectionManager { connectionWatcher.stop(); - RPromise result = new RedissonPromise(); - CountableListener listener = new CountableListener(result, null, getEntrySet().size()); + List> futures = new ArrayList<>(); for (MasterSlaveEntry entry : getEntrySet()) { - entry.shutdownAsync().onComplete(listener); + futures.add(entry.shutdownAsync()); + } + CompletableFuture future = CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])); + + try { + future.get(timeout, unit); + } catch (Exception e) { + // skip } - - result.awaitUninterruptibly(timeout, unit); resolverGroup.close(); shutdownLatch.close(); diff --git a/redisson/src/main/java/org/redisson/connection/MasterSlaveEntry.java b/redisson/src/main/java/org/redisson/connection/MasterSlaveEntry.java index 6626bc6b9..7a4367bfc 100644 --- a/redisson/src/main/java/org/redisson/connection/MasterSlaveEntry.java +++ b/redisson/src/main/java/org/redisson/connection/MasterSlaveEntry.java @@ -480,18 +480,18 @@ public class MasterSlaveEntry { }); } - public RFuture shutdownAsync() { + public CompletableFuture shutdownAsync() { if (!active.compareAndSet(true, false)) { - return RedissonPromise.newSucceededFuture(null); + return CompletableFuture.completedFuture(null); } - RPromise result = new RedissonPromise(); - CountableListener listener = new CountableListener(result, null, 2); + List> futures = new ArrayList<>(); if (masterEntry != null) { - masterEntry.shutdownAsync().onComplete(listener); + futures.add(masterEntry.shutdownAsync().toCompletableFuture()); } - slaveBalancer.shutdownAsync().onComplete(listener); - return result; + futures.add(slaveBalancer.shutdownAsync().toCompletableFuture()); + + return CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])); } public RFuture connectionWriteOp(RedisCommand command) {