From d846149ae16739b55cc891eba1f2455a4acc28c3 Mon Sep 17 00:00:00 2001 From: Marcos Nils Date: Tue, 4 Feb 2014 22:34:48 -0300 Subject: [PATCH] Fix #526. Node parsing error uppon :0 --- .../jedis/JedisClusterConnectionHandler.java | 16 +++++++++++----- .../clients/jedis/tests/JedisClusterTest.java | 1 - 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/main/java/redis/clients/jedis/JedisClusterConnectionHandler.java b/src/main/java/redis/clients/jedis/JedisClusterConnectionHandler.java index 045d365..15d5d41 100644 --- a/src/main/java/redis/clients/jedis/JedisClusterConnectionHandler.java +++ b/src/main/java/redis/clients/jedis/JedisClusterConnectionHandler.java @@ -27,15 +27,17 @@ public abstract class JedisClusterConnectionHandler { JedisPool jp = new JedisPool(hostAndPort.getHost(), hostAndPort.getPort()); this.nodes.put(hostAndPort.getHost() + hostAndPort.getPort(), jp); - discoverClusterNodesAndSlots(jp); + Jedis jedis = jp.getResource(); + discoverClusterNodesAndSlots(jedis); + jp.returnResource(jedis); } } - private void discoverClusterNodesAndSlots(JedisPool jp) { - String localNodes = jp.getResource().clusterNodes(); + private void discoverClusterNodesAndSlots(Jedis jedis) { + String localNodes = jedis.clusterNodes(); for (String nodeInfo : localNodes.split("\n")) { - HostAndPort node = getHostAndPortFromNodeLine(nodeInfo); + HostAndPort node = getHostAndPortFromNodeLine(nodeInfo, jedis); JedisPool nodePool = new JedisPool(node.getHost(), node.getPort()); this.nodes.put(node.getHost() + node.getPort(), nodePool); populateNodeSlots(nodeInfo, nodePool); @@ -63,8 +65,12 @@ public abstract class JedisClusterConnectionHandler { } } - private HostAndPort getHostAndPortFromNodeLine(String nodeInfo) { + private HostAndPort getHostAndPortFromNodeLine(String nodeInfo, Jedis currentConnection) { String stringHostAndPort = nodeInfo.split(" ", 3)[1]; + if (":0".equals(stringHostAndPort)) { + return new HostAndPort(currentConnection.getClient().getHost(), + currentConnection.getClient().getPort()); + } String[] arrayHostAndPort = stringHostAndPort.split(":"); return new HostAndPort(arrayHostAndPort[0], Integer.valueOf(arrayHostAndPort[1])); diff --git a/src/test/java/redis/clients/jedis/tests/JedisClusterTest.java b/src/test/java/redis/clients/jedis/tests/JedisClusterTest.java index c32a9be..356e642 100644 --- a/src/test/java/redis/clients/jedis/tests/JedisClusterTest.java +++ b/src/test/java/redis/clients/jedis/tests/JedisClusterTest.java @@ -44,7 +44,6 @@ public class JedisClusterTest extends Assert { // ---- configure cluster // add nodes to cluster - node1.clusterMeet("127.0.0.1", nodeInfo1.getPort()); node1.clusterMeet("127.0.0.1", nodeInfo2.getPort()); node1.clusterMeet("127.0.0.1", nodeInfo3.getPort());