diff --git a/src/main/java/org/springframework/data/redis/connection/convert/Converters.java b/src/main/java/org/springframework/data/redis/connection/convert/Converters.java index 41b3063c9..47866c7ce 100644 --- a/src/main/java/org/springframework/data/redis/connection/convert/Converters.java +++ b/src/main/java/org/springframework/data/redis/connection/convert/Converters.java @@ -84,8 +84,13 @@ abstract public class Converters { SlotRange range = parseSlotRange(args); Set flags = parseFlags(args); + String portPart = hostAndPort[1]; + if(portPart.contains("@")){ + portPart = portPart.substring(0, portPart.indexOf('@')); + } + RedisClusterNodeBuilder nodeBuilder = RedisClusterNode.newRedisClusterNode() - .listeningAt(hostAndPort[0], Integer.valueOf(hostAndPort[1])) // + .listeningAt(hostAndPort[0], Integer.valueOf(portPart)) // .withId(args[ID_INDEX]) // .promotedAs(flags.contains(Flag.MASTER) ? NodeType.MASTER : NodeType.SLAVE) // .serving(range) // diff --git a/src/test/java/org/springframework/data/redis/connection/convert/ConvertersUnitTests.java b/src/test/java/org/springframework/data/redis/connection/convert/ConvertersUnitTests.java index 219538f7e..7c6f08f13 100644 --- a/src/test/java/org/springframework/data/redis/connection/convert/ConvertersUnitTests.java +++ b/src/test/java/org/springframework/data/redis/connection/convert/ConvertersUnitTests.java @@ -34,14 +34,23 @@ import org.springframework.data.redis.connection.RedisNode.NodeType; */ public class ConvertersUnitTests { - private static final String CLUSTER_NODES_RESPONSE = "" // - + "ef570f86c7b1a953846668debc177a3a16733420 127.0.0.1:6379 myself,master - 0 0 1 connected 0-5460 5602" + private static final String REDIS_3_0_CLUSTER_NODES_RESPONSE = "" // + + "ef570f86c7b1a953846668debc177a3a16733420 127.0.0.1:6379@16379 myself,master - 0 0 1 connected 0-5460 5602" + "\n" - + "0f2ee5df45d18c50aca07228cc18b1da96fd5e84 127.0.0.1:6380 master - 0 1427718161587 2 connected 5461 5603-10922" + + "0f2ee5df45d18c50aca07228cc18b1da96fd5e84 127.0.0.1:6380@16380 master - 0 1427718161587 2 connected 5461 5603-10922" + "\n" - + "3b9b8192a874fa8f1f09dbc0ee20afab5738eee7 127.0.0.1:6381 master - 0 1427718161587 3 connected 10923-16383" + + "3b9b8192a874fa8f1f09dbc0ee20afab5738eee7 127.0.0.1:6381@6381 master - 0 1427718161587 3 connected 10923-16383" + "\n" - + "8cad73f63eb996fedba89f041636f17d88cda075 127.0.0.1:7369 slave ef570f86c7b1a953846668debc177a3a16733420 0 1427718161587 1 connected"; + + "8cad73f63eb996fedba89f041636f17d88cda075 127.0.0.1:7369@7369 slave ef570f86c7b1a953846668debc177a3a16733420 0 1427718161587 1 connected"; + + private static final String REDIS_3_2_CLUSTER_NODES_RESPONSE = "" // + + "ef570f86c7b1a953846668debc177a3a16733420 127.0.0.1:6379@16379 myself,master - 0 0 1 connected 0-5460 5602" + + "\n" + + "0f2ee5df45d18c50aca07228cc18b1da96fd5e84 127.0.0.1:6380@16380 master - 0 1427718161587 2 connected 5461 5603-10922" + + "\n" + + "3b9b8192a874fa8f1f09dbc0ee20afab5738eee7 127.0.0.1:6381@6381 master - 0 1427718161587 3 connected 10923-16383" + + "\n" + + "8cad73f63eb996fedba89f041636f17d88cda075 127.0.0.1:7369@7369 slave ef570f86c7b1a953846668debc177a3a16733420 0 1427718161587 1 connected"; private static final String CLUSTER_NODE_WITH_SINGLE_SLOT_RESPONSE = "ef570f86c7b1a953846668debc177a3a16733420 127.0.0.1:6379 myself,master - 0 0 1 connected 3456"; @@ -53,9 +62,62 @@ public class ConvertersUnitTests { * @see DATAREDIS-315 */ @Test - public void toSetOfRedisClusterNodesShouldConvertSingleStringNodesResponseCorrectly() { + public void toSetOfRedis30ClusterNodesShouldConvertSingleStringNodesResponseCorrectly() { - Iterator nodes = Converters.toSetOfRedisClusterNodes(CLUSTER_NODES_RESPONSE).iterator(); + Iterator nodes = Converters.toSetOfRedisClusterNodes(REDIS_3_0_CLUSTER_NODES_RESPONSE).iterator(); + + RedisClusterNode node = nodes.next(); // 127.0.0.1:6379 + assertThat(node.getId(), is("ef570f86c7b1a953846668debc177a3a16733420")); + assertThat(node.getHost(), is("127.0.0.1")); + assertThat(node.getPort(), is(6379)); + assertThat(node.getType(), is(NodeType.MASTER)); + assertThat(node.getSlotRange().contains(0), is(true)); + assertThat(node.getSlotRange().contains(5460), is(true)); + assertThat(node.getSlotRange().contains(5461), is(false)); + assertThat(node.getSlotRange().contains(5602), is(true)); + assertThat(node.getFlags(), hasItems(Flag.MASTER, Flag.MYSELF)); + assertThat(node.getLinkState(), is(LinkState.CONNECTED)); + + node = nodes.next(); // 127.0.0.1:6380 + assertThat(node.getId(), is("0f2ee5df45d18c50aca07228cc18b1da96fd5e84")); + assertThat(node.getHost(), is("127.0.0.1")); + assertThat(node.getPort(), is(6380)); + assertThat(node.getType(), is(NodeType.MASTER)); + assertThat(node.getSlotRange().contains(5460), is(false)); + assertThat(node.getSlotRange().contains(5461), is(true)); + assertThat(node.getSlotRange().contains(5462), is(false)); + assertThat(node.getSlotRange().contains(10922), is(true)); + assertThat(node.getFlags(), hasItems(Flag.MASTER)); + assertThat(node.getLinkState(), is(LinkState.CONNECTED)); + + node = nodes.next(); // 127.0.0.1:638 + assertThat(node.getId(), is("3b9b8192a874fa8f1f09dbc0ee20afab5738eee7")); + assertThat(node.getHost(), is("127.0.0.1")); + assertThat(node.getPort(), is(6381)); + assertThat(node.getType(), is(NodeType.MASTER)); + assertThat(node.getSlotRange().contains(10923), is(true)); + assertThat(node.getSlotRange().contains(16383), is(true)); + assertThat(node.getFlags(), hasItems(Flag.MASTER)); + assertThat(node.getLinkState(), is(LinkState.CONNECTED)); + + node = nodes.next(); // 127.0.0.1:7369 + assertThat(node.getId(), is("8cad73f63eb996fedba89f041636f17d88cda075")); + assertThat(node.getHost(), is("127.0.0.1")); + assertThat(node.getPort(), is(7369)); + assertThat(node.getType(), is(NodeType.SLAVE)); + assertThat(node.getMasterId(), is("ef570f86c7b1a953846668debc177a3a16733420")); + assertThat(node.getSlotRange(), notNullValue()); + assertThat(node.getFlags(), hasItems(Flag.SLAVE)); + assertThat(node.getLinkState(), is(LinkState.CONNECTED)); + } + + /** + * @see DATAREDIS-315 + */ + @Test + public void toSetOfRedis32ClusterNodesShouldConvertSingleStringNodesResponseCorrectly() { + + Iterator nodes = Converters.toSetOfRedisClusterNodes(REDIS_3_2_CLUSTER_NODES_RESPONSE).iterator(); RedisClusterNode node = nodes.next(); // 127.0.0.1:6379 assertThat(node.getId(), is("ef570f86c7b1a953846668debc177a3a16733420"));