From f57a474b5500e0ced7cbeed4e1bccea466de2e47 Mon Sep 17 00:00:00 2001 From: Nikita Date: Mon, 14 Dec 2015 14:11:31 +0300 Subject: [PATCH] isShuttingDown and isShutdown methods added. #323 --- src/main/java/org/redisson/Redisson.java | 10 ++++++++++ src/main/java/org/redisson/RedissonClient.java | 15 +++++++++++++++ src/main/java/org/redisson/RedissonReactive.java | 9 +++++++++ .../org/redisson/api/RedissonReactiveClient.java | 15 +++++++++++++++ .../redisson/connection/ConnectionManager.java | 4 ++++ .../connection/MasterSlaveConnectionManager.java | 12 ++++++++++++ .../org/redisson/misc/InfinitySemaphoreLatch.java | 5 +++++ 7 files changed, 70 insertions(+) diff --git a/src/main/java/org/redisson/Redisson.java b/src/main/java/org/redisson/Redisson.java index 7d25bc4bb..fc5b3fb8c 100755 --- a/src/main/java/org/redisson/Redisson.java +++ b/src/main/java/org/redisson/Redisson.java @@ -374,5 +374,15 @@ public class Redisson implements RedissonClient { commandExecutor.get(commandExecutor.writeAllAsync(RedisCommands.FLUSHALL)); } + @Override + public boolean isShutdown() { + return connectionManager.isShutdown(); + } + + @Override + public boolean isShuttingDown() { + return connectionManager.isShuttingDown(); + } + } diff --git a/src/main/java/org/redisson/RedissonClient.java b/src/main/java/org/redisson/RedissonClient.java index 6eadcbcd9..ce699ab2d 100755 --- a/src/main/java/org/redisson/RedissonClient.java +++ b/src/main/java/org/redisson/RedissonClient.java @@ -450,4 +450,19 @@ public interface RedissonClient { */ void flushall(); + /** + * Returns {@code true} if this Redisson instance has been shut down. + * + * @return + */ + boolean isShutdown(); + + /** + * Returns {@code true} if this Redisson instance was started to be shutdown + * or was shutdown {@link #isShutdown()} already. + * + * @return + */ + boolean isShuttingDown(); + } diff --git a/src/main/java/org/redisson/RedissonReactive.java b/src/main/java/org/redisson/RedissonReactive.java index ba505fa40..398e64cfa 100644 --- a/src/main/java/org/redisson/RedissonReactive.java +++ b/src/main/java/org/redisson/RedissonReactive.java @@ -305,6 +305,15 @@ public class RedissonReactive implements RedissonReactiveClient { connectionManager.shutdown(); } + @Override + public boolean isShutdown() { + return connectionManager.isShutdown(); + } + + @Override + public boolean isShuttingDown() { + return connectionManager.isShuttingDown(); + } } diff --git a/src/main/java/org/redisson/api/RedissonReactiveClient.java b/src/main/java/org/redisson/api/RedissonReactiveClient.java index 039e67993..19400d282 100644 --- a/src/main/java/org/redisson/api/RedissonReactiveClient.java +++ b/src/main/java/org/redisson/api/RedissonReactiveClient.java @@ -374,4 +374,19 @@ public interface RedissonReactiveClient { */ NodesGroup getClusterNodesGroup(); + /** + * Returns {@code true} if this Redisson instance has been shut down. + * + * @return + */ + boolean isShutdown(); + + /** + * Returns {@code true} if this Redisson instance was started to be shutdown + * or was shutdown {@link #isShutdown()} already. + * + * @return + */ + boolean isShuttingDown(); + } diff --git a/src/main/java/org/redisson/connection/ConnectionManager.java b/src/main/java/org/redisson/connection/ConnectionManager.java index 691d3bbe4..e09f1cd4c 100644 --- a/src/main/java/org/redisson/connection/ConnectionManager.java +++ b/src/main/java/org/redisson/connection/ConnectionManager.java @@ -45,6 +45,10 @@ import io.netty.util.concurrent.Promise; */ public interface ConnectionManager { + boolean isShutdown(); + + boolean isShuttingDown(); + Promise subscribe(Codec codec, String channelName, RedisPubSubListener listener); ConnectionListener getConnectListener(); diff --git a/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java b/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java index c6ba265c9..4f0d4284d 100644 --- a/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java +++ b/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java @@ -649,6 +649,17 @@ public class MasterSlaveConnectionManager implements ConnectionManager { group.shutdownGracefully().syncUninterruptibly(); } + @Override + public boolean isShuttingDown() { + return shutdownLatch.isClosed(); + } + + @Override + public boolean isShutdown() { + return group.isTerminated(); + } + + @Override public Collection getClients() { return Collections.unmodifiableCollection(clients); } @@ -682,6 +693,7 @@ public class MasterSlaveConnectionManager implements ConnectionManager { } } + @Override public InfinitySemaphoreLatch getShutdownLatch() { return shutdownLatch; } diff --git a/src/main/java/org/redisson/misc/InfinitySemaphoreLatch.java b/src/main/java/org/redisson/misc/InfinitySemaphoreLatch.java index 4e6e238e6..1242ce571 100644 --- a/src/main/java/org/redisson/misc/InfinitySemaphoreLatch.java +++ b/src/main/java/org/redisson/misc/InfinitySemaphoreLatch.java @@ -24,6 +24,7 @@ import java.util.concurrent.locks.AbstractQueuedSynchronizer; * Code parts from Manik Surtani (manik@jboss.org) * @author Nikita Koksharov */ +// TODO refactor to AbstractQueuedLongSynchronizer public class InfinitySemaphoreLatch extends AbstractQueuedSynchronizer { private static final long serialVersionUID = 1744280161777661090l; @@ -78,6 +79,10 @@ public class InfinitySemaphoreLatch extends AbstractQueuedSynchronizer { return getState() == OPEN_STATE; } + public boolean isClosed() { + return closed; + } + // waiting for an open state public final boolean closeAndAwaitUninterruptibly() { closed = true;