From 7855cd9a34b873dd0013dc8a9634a1c821c2d6b4 Mon Sep 17 00:00:00 2001 From: Nikita Date: Wed, 7 Jan 2015 11:34:41 +0300 Subject: [PATCH] RedisConnectionException handling during cluster init. #65 --- .../connection/ClusterConnectionManager.java | 79 ++++++++++--------- 1 file changed, 42 insertions(+), 37 deletions(-) diff --git a/src/main/java/org/redisson/connection/ClusterConnectionManager.java b/src/main/java/org/redisson/connection/ClusterConnectionManager.java index 9e61a798a..b8aaddae6 100644 --- a/src/main/java/org/redisson/connection/ClusterConnectionManager.java +++ b/src/main/java/org/redisson/connection/ClusterConnectionManager.java @@ -35,6 +35,7 @@ import org.slf4j.LoggerFactory; import com.lambdaworks.redis.RedisAsyncConnection; import com.lambdaworks.redis.RedisClient; +import com.lambdaworks.redis.RedisConnectionException; import com.lambdaworks.redis.pubsub.RedisPubSubAdapter; import com.lambdaworks.redis.pubsub.RedisPubSubConnection; @@ -47,57 +48,61 @@ public class ClusterConnectionManager extends MasterSlaveConnectionManager { public ClusterConnectionManager(ClusterServersConfig cfg, Config config) { init(config); - Map partitions = new HashMap(); for (URI addr : cfg.getNodeAddresses()) { RedisClient client = new RedisClient(group, addr.getHost(), addr.getPort(), cfg.getTimeout()); - RedisAsyncConnection connection = client.connectAsync(); - String nodesValue = connection.clusterNodes().awaitUninterruptibly().getNow(); - System.out.println(nodesValue); - - List nodes = parse(nodesValue); - for (ClusterNodeInfo clusterNodeInfo : nodes) { - String id = clusterNodeInfo.getNodeId(); - if (clusterNodeInfo.getFlags().contains(Flag.SLAVE)) { - id = clusterNodeInfo.getSlaveOf(); - } - ClusterPartition partition = partitions.get(id); - if (partition == null) { - partition = new ClusterPartition(); - partitions.put(id, partition); - } + try { + RedisAsyncConnection connection = client.connectAsync(); + String nodesValue = connection.clusterNodes().awaitUninterruptibly().getNow(); + List nodes = parse(nodesValue); + + Map partitions = new HashMap(); + for (ClusterNodeInfo clusterNodeInfo : nodes) { + String id = clusterNodeInfo.getNodeId(); + if (clusterNodeInfo.getFlags().contains(Flag.SLAVE)) { + id = clusterNodeInfo.getSlaveOf(); + } + ClusterPartition partition = partitions.get(id); + if (partition == null) { + partition = new ClusterPartition(); + partitions.put(id, partition); + } - if (clusterNodeInfo.getFlags().contains(Flag.FAIL)) { - partition.setMasterFail(true); - } + if (clusterNodeInfo.getFlags().contains(Flag.FAIL)) { + partition.setMasterFail(true); + } - if (clusterNodeInfo.getFlags().contains(Flag.SLAVE)) { - partition.addSlaveAddress(clusterNodeInfo.getAddress()); - } else { - partition.setEndSlot(clusterNodeInfo.getEndSlot()); - partition.setMasterAddress(clusterNodeInfo.getAddress()); + if (clusterNodeInfo.getFlags().contains(Flag.SLAVE)) { + partition.addSlaveAddress(clusterNodeInfo.getAddress()); + } else { + partition.setEndSlot(clusterNodeInfo.getEndSlot()); + partition.setMasterAddress(clusterNodeInfo.getAddress()); + } } - } - for (ClusterPartition partition : partitions.values()) { - if (partition.isMasterFail()) { - continue; - } + for (ClusterPartition partition : partitions.values()) { + if (partition.isMasterFail()) { + continue; + } - MasterSlaveServersConfig c = create(cfg); - log.info("master: {}", partition.getMasterAddress()); - c.setMasterAddress(partition.getMasterAddress()); + MasterSlaveServersConfig c = create(cfg); + log.info("master: {}", partition.getMasterAddress()); + c.setMasterAddress(partition.getMasterAddress()); // for (String slaveAddress : partition.getSlaveAddresses()) { // log.info("slave: {}", slaveAddress); // c.addSlaveAddress(slaveAddress); // } - SingleEntry entry = new SingleEntry(codec, group, c); - entries.put(partition.getEndSlot(), entry); - } + SingleEntry entry = new SingleEntry(codec, group, c); + entries.put(partition.getEndSlot(), entry); + } + break; - client.shutdown(); - break; + } catch (RedisConnectionException e) { + log.warn(e.getMessage(), e); + } finally { + client.shutdown(); + } } this.config = create(cfg);