From a3b6bdacf00c8a2ea3df25e56bfc363aa5052261 Mon Sep 17 00:00:00 2001 From: Nikita Date: Tue, 1 Mar 2016 07:59:04 +0300 Subject: [PATCH] Node type added. #399 --- src/main/java/org/redisson/RedisNodes.java | 14 ++++++++++++++ .../cluster/ClusterConnectionListener.java | 2 +- .../connection/ClientConnectionsEntry.java | 3 +-- .../redisson/connection/ConnectionInitializer.java | 2 +- .../org/redisson/connection/ConnectionManager.java | 3 ++- .../connection/DefaultConnectionListener.java | 2 +- .../connection/MasterSlaveConnectionManager.java | 7 ++++--- .../org/redisson/connection/MasterSlaveEntry.java | 6 +++--- .../org/redisson/connection/RedisClientEntry.java | 10 +++++++++- .../java/org/redisson/connection/SingleEntry.java | 4 ++-- .../redisson/connection/pool/ConnectionPool.java | 2 +- src/main/java/org/redisson/core/Node.java | 9 +++++++++ src/main/java/org/redisson/core/NodeType.java | 7 +++++++ src/main/java/org/redisson/core/NodesGroup.java | 10 ++++++++++ 14 files changed, 65 insertions(+), 16 deletions(-) create mode 100644 src/main/java/org/redisson/core/NodeType.java diff --git a/src/main/java/org/redisson/RedisNodes.java b/src/main/java/org/redisson/RedisNodes.java index 7ffd68a4e9f..4c79e13e827 100644 --- a/src/main/java/org/redisson/RedisNodes.java +++ b/src/main/java/org/redisson/RedisNodes.java @@ -30,6 +30,7 @@ import org.redisson.connection.ConnectionManager; import org.redisson.connection.RedisClientEntry; import org.redisson.core.Node; +import org.redisson.core.NodeType; import org.redisson.core.NodesGroup; import io.netty.util.concurrent.Future; @@ -44,6 +45,19 @@ public RedisNodes(ConnectionManager connectionManager) { this.connectionManager = connectionManager; } + @Override + public Collection getNodes(NodeType type) { + Collection clients = (Collection) connectionManager.getClients(); + List result = new ArrayList(); + for (N node : clients) { + if (node.getType().equals(type)) { + result.add(node); + } + } + return result; + } + + @Override public Collection getNodes() { return (Collection) connectionManager.getClients(); diff --git a/src/main/java/org/redisson/cluster/ClusterConnectionListener.java b/src/main/java/org/redisson/cluster/ClusterConnectionListener.java index f914cdc3c01..18b4aa775ce 100644 --- a/src/main/java/org/redisson/cluster/ClusterConnectionListener.java +++ b/src/main/java/org/redisson/cluster/ClusterConnectionListener.java @@ -21,7 +21,7 @@ import org.redisson.client.protocol.RedisCommands; import org.redisson.connection.DefaultConnectionListener; import org.redisson.connection.FutureConnectionListener; -import org.redisson.connection.ClientConnectionsEntry.NodeType; +import org.redisson.core.NodeType; public class ClusterConnectionListener extends DefaultConnectionListener { diff --git a/src/main/java/org/redisson/connection/ClientConnectionsEntry.java b/src/main/java/org/redisson/connection/ClientConnectionsEntry.java index efc8f207591..0bb9f8080e8 100644 --- a/src/main/java/org/redisson/connection/ClientConnectionsEntry.java +++ b/src/main/java/org/redisson/connection/ClientConnectionsEntry.java @@ -24,6 +24,7 @@ import org.redisson.client.RedisClient; import org.redisson.client.RedisConnection; import org.redisson.client.RedisPubSubConnection; +import org.redisson.core.NodeType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -48,8 +49,6 @@ public enum FreezeReason {MANAGER, RECONNECT, SYSTEM} private FreezeReason freezeReason; final RedisClient client; - public enum NodeType {SLAVE, MASTER, SENTINEL} - private final NodeType nodeType; private ConnectionManager connectionManager; diff --git a/src/main/java/org/redisson/connection/ConnectionInitializer.java b/src/main/java/org/redisson/connection/ConnectionInitializer.java index 587278e02e0..50deb2c423d 100644 --- a/src/main/java/org/redisson/connection/ConnectionInitializer.java +++ b/src/main/java/org/redisson/connection/ConnectionInitializer.java @@ -17,7 +17,7 @@ import org.redisson.MasterSlaveServersConfig; import org.redisson.client.RedisConnection; -import org.redisson.connection.ClientConnectionsEntry.NodeType; +import org.redisson.core.NodeType; import io.netty.util.concurrent.Promise; diff --git a/src/main/java/org/redisson/connection/ConnectionManager.java b/src/main/java/org/redisson/connection/ConnectionManager.java index 475bc6bb4b1..48b2e2c9835 100644 --- a/src/main/java/org/redisson/connection/ConnectionManager.java +++ b/src/main/java/org/redisson/connection/ConnectionManager.java @@ -28,6 +28,7 @@ import org.redisson.client.protocol.RedisCommand; import org.redisson.cluster.ClusterSlotRange; import org.redisson.connection.ClientConnectionsEntry.FreezeReason; +import org.redisson.core.NodeType; import org.redisson.misc.InfinitySemaphoreLatch; import io.netty.channel.EventLoopGroup; @@ -87,7 +88,7 @@ public interface ConnectionManager { RedisClient createClient(String host, int port, int timeout); - RedisClient createClient(String host, int port); + RedisClient createClient(NodeType type, String host, int port); MasterSlaveEntry getEntry(InetSocketAddress addr); diff --git a/src/main/java/org/redisson/connection/DefaultConnectionListener.java b/src/main/java/org/redisson/connection/DefaultConnectionListener.java index 8889fa18cd6..27c100d7919 100644 --- a/src/main/java/org/redisson/connection/DefaultConnectionListener.java +++ b/src/main/java/org/redisson/connection/DefaultConnectionListener.java @@ -19,7 +19,7 @@ import org.redisson.client.RedisConnection; import org.redisson.client.RedisException; import org.redisson.client.protocol.RedisCommands; -import org.redisson.connection.ClientConnectionsEntry.NodeType; +import org.redisson.core.NodeType; import io.netty.util.concurrent.Promise; diff --git a/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java b/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java index b96c1d28329..917cd135fbc 100644 --- a/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java +++ b/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java @@ -44,6 +44,7 @@ import org.redisson.client.protocol.pubsub.PubSubType; import org.redisson.cluster.ClusterSlotRange; import org.redisson.connection.ClientConnectionsEntry.FreezeReason; +import org.redisson.core.NodeType; import org.redisson.misc.InfinitySemaphoreLatch; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -259,14 +260,14 @@ protected MasterSlaveServersConfig create(BaseMasterSlaveServersConfig cfg) { } @Override - public RedisClient createClient(String host, int port) { + public RedisClient createClient(NodeType type, String host, int port) { RedisClient client = createClient(host, port, config.getConnectTimeout()); - clients.add(new RedisClientEntry(client, this)); + clients.add(new RedisClientEntry(client, this, type)); return client; } public void shutdownAsync(RedisClient client) { - clients.remove(new RedisClientEntry(client, this)); + clients.remove(new RedisClientEntry(client, this, null)); client.shutdownAsync(); } diff --git a/src/main/java/org/redisson/connection/MasterSlaveEntry.java b/src/main/java/org/redisson/connection/MasterSlaveEntry.java index 816a7ff3231..37533439d63 100644 --- a/src/main/java/org/redisson/connection/MasterSlaveEntry.java +++ b/src/main/java/org/redisson/connection/MasterSlaveEntry.java @@ -30,10 +30,10 @@ import org.redisson.client.RedisPubSubConnection; import org.redisson.cluster.ClusterSlotRange; import org.redisson.connection.ClientConnectionsEntry.FreezeReason; -import org.redisson.connection.ClientConnectionsEntry.NodeType; import org.redisson.connection.balancer.LoadBalancerManager; import org.redisson.connection.balancer.LoadBalancerManagerImpl; import org.redisson.connection.pool.MasterConnectionPool; +import org.redisson.core.NodeType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -84,7 +84,7 @@ public List> initSlaveBalancer(Collection disconnectedNodes) { } public Future setupMasterEntry(String host, int port) { - RedisClient client = connectionManager.createClient(host, port); + RedisClient client = connectionManager.createClient(NodeType.MASTER, host, port); masterEntry = new ClientConnectionsEntry(client, config.getMasterConnectionMinimumIdleSize(), config.getMasterConnectionPoolSize(), 0, 0, connectionManager, NodeType.MASTER, config); return writeConnectionHolder.add(masterEntry); @@ -108,7 +108,7 @@ public Future addSlave(String host, int port) { } private Future addSlave(String host, int port, boolean freezed, NodeType mode) { - RedisClient client = connectionManager.createClient(host, port); + RedisClient client = connectionManager.createClient(NodeType.SLAVE, host, port); ClientConnectionsEntry entry = new ClientConnectionsEntry(client, this.config.getSlaveConnectionMinimumIdleSize(), this.config.getSlaveConnectionPoolSize(), diff --git a/src/main/java/org/redisson/connection/RedisClientEntry.java b/src/main/java/org/redisson/connection/RedisClientEntry.java index 289d9dae01d..9150613fcea 100644 --- a/src/main/java/org/redisson/connection/RedisClientEntry.java +++ b/src/main/java/org/redisson/connection/RedisClientEntry.java @@ -20,6 +20,7 @@ import org.redisson.client.RedisConnection; import org.redisson.client.protocol.RedisCommands; import org.redisson.core.ClusterNode; +import org.redisson.core.NodeType; import java.net.InetSocketAddress; import java.util.Map; @@ -28,11 +29,18 @@ public class RedisClientEntry implements ClusterNode { private final RedisClient client; private final ConnectionManager manager; + private final NodeType type; - public RedisClientEntry(RedisClient client, ConnectionManager manager) { + public RedisClientEntry(RedisClient client, ConnectionManager manager, NodeType type) { super(); this.client = client; this.manager = manager; + this.type = type; + } + + @Override + public NodeType getType() { + return type; } public RedisClient getClient() { diff --git a/src/main/java/org/redisson/connection/SingleEntry.java b/src/main/java/org/redisson/connection/SingleEntry.java index c4396e36648..82fb1bf4163 100644 --- a/src/main/java/org/redisson/connection/SingleEntry.java +++ b/src/main/java/org/redisson/connection/SingleEntry.java @@ -24,9 +24,9 @@ import org.redisson.client.RedisConnection; import org.redisson.client.RedisPubSubConnection; import org.redisson.cluster.ClusterSlotRange; -import org.redisson.connection.ClientConnectionsEntry.NodeType; import org.redisson.connection.pool.PubSubConnectionPool; import org.redisson.connection.pool.SinglePubSubConnectionPool; +import org.redisson.core.NodeType; import io.netty.util.concurrent.Future; import io.netty.util.concurrent.FutureListener; @@ -43,7 +43,7 @@ public SingleEntry(Set slotRanges, ConnectionManager connectio @Override public Future setupMasterEntry(String host, int port) { - RedisClient masterClient = connectionManager.createClient(host, port); + RedisClient masterClient = connectionManager.createClient(NodeType.MASTER, host, port); masterEntry = new ClientConnectionsEntry(masterClient, config.getMasterConnectionMinimumIdleSize(), config.getMasterConnectionPoolSize(), diff --git a/src/main/java/org/redisson/connection/pool/ConnectionPool.java b/src/main/java/org/redisson/connection/pool/ConnectionPool.java index d8d2a3f9c1b..56143a4b0ac 100644 --- a/src/main/java/org/redisson/connection/pool/ConnectionPool.java +++ b/src/main/java/org/redisson/connection/pool/ConnectionPool.java @@ -28,9 +28,9 @@ import org.redisson.client.protocol.RedisCommands; import org.redisson.connection.ClientConnectionsEntry; import org.redisson.connection.ClientConnectionsEntry.FreezeReason; -import org.redisson.connection.ClientConnectionsEntry.NodeType; import org.redisson.connection.ConnectionManager; import org.redisson.connection.MasterSlaveEntry; +import org.redisson.core.NodeType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/org/redisson/core/Node.java b/src/main/java/org/redisson/core/Node.java index 6c3039999e9..a2e77d570e6 100644 --- a/src/main/java/org/redisson/core/Node.java +++ b/src/main/java/org/redisson/core/Node.java @@ -25,6 +25,15 @@ */ public interface Node { + /** + * Returns node type + * + * @see {@link NodeType} + * + * @return + */ + NodeType getType(); + /** * Get Redis node address * diff --git a/src/main/java/org/redisson/core/NodeType.java b/src/main/java/org/redisson/core/NodeType.java new file mode 100644 index 00000000000..45ed1439197 --- /dev/null +++ b/src/main/java/org/redisson/core/NodeType.java @@ -0,0 +1,7 @@ +package org.redisson.core; + +public enum NodeType { + + MASTER, SLAVE + +} diff --git a/src/main/java/org/redisson/core/NodesGroup.java b/src/main/java/org/redisson/core/NodesGroup.java index fd5026a0889..6d88eab1e4e 100644 --- a/src/main/java/org/redisson/core/NodesGroup.java +++ b/src/main/java/org/redisson/core/NodesGroup.java @@ -41,6 +41,16 @@ public interface NodesGroup { */ void removeConnectionListener(int listenerId); + /** + * Get all nodes by type + * + * @see {@link NodeType} + * + * @param type + * @return + */ + Collection getNodes(NodeType type); + /** * All Redis nodes used by Redisson. * This collection may change during master change, cluster topology update and etc.