From 13664c3153300054855a52d80b8899f3c3745b79 Mon Sep 17 00:00:00 2001 From: Nikita Date: Wed, 20 Apr 2016 11:23:24 +0300 Subject: [PATCH] Fixed cluster initialization. #476 --- .../cluster/ClusterConnectionManager.java | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/redisson/cluster/ClusterConnectionManager.java b/src/main/java/org/redisson/cluster/ClusterConnectionManager.java index 12b8518d6..de73bd42b 100644 --- a/src/main/java/org/redisson/cluster/ClusterConnectionManager.java +++ b/src/main/java/org/redisson/cluster/ClusterConnectionManager.java @@ -74,18 +74,31 @@ public class ClusterConnectionManager extends MasterSlaveConnectionManager { try { RedisConnection connection = connectionFuture.syncUninterruptibly().getNow(); String nodesValue = connection.sync(RedisCommands.CLUSTER_NODES); + + log.debug("cluster nodes state from {} during startup:\n{}", connection.getRedisClient().getAddr(), nodesValue); Collection partitions = parsePartitions(nodesValue); List>>> futures = new ArrayList>>>(); for (ClusterPartition partition : partitions) { + if (partition.isMasterFail()) { + continue; + } Future>> masterFuture = addMasterEntry(partition, cfg); futures.add(masterFuture); } for (Future>> masterFuture : futures) { - masterFuture.syncUninterruptibly(); + masterFuture.awaitUninterruptibly(); + if (!masterFuture.isSuccess()) { + log.error("Can't connect to master node.", masterFuture.cause()); + continue; + } for (Future future : masterFuture.getNow()) { - future.syncUninterruptibly(); + future.awaitUninterruptibly(); + if (!future.isSuccess()) { + log.error("Can't add nodes.", masterFuture.cause()); + continue; + } } } break; @@ -102,7 +115,7 @@ public class ClusterConnectionManager extends MasterSlaveConnectionManager { scheduleClusterChangeCheck(cfg); } - + private Future connect(ClusterServersConfig cfg, final URI addr) { RedisConnection connection = nodeConnections.get(addr); if (connection != null) { @@ -181,7 +194,7 @@ public class ClusterConnectionManager extends MasterSlaveConnectionManager { @Override public void operationComplete(Future> future) throws Exception { if (!future.isSuccess()) { - log.error("Can't execute CLUSTER_INFO with " + connection.getRedisClient().getAddr(), future.cause()); + log.error("Can't execute CLUSTER_INFO for " + connection.getRedisClient().getAddr(), future.cause()); result.setFailure(future.cause()); return; }