Skip to content

Commit f18def0

Browse files
committed
DATAREDIS-315 - Support Redis 3.2 CLUSTER NODES output format.
The CLUSTER NODES converter supports the formats for Redis 3.0 and Redis 3.2. Original pull request: spring-projects#158.
1 parent c105cbb commit f18def0

File tree

2 files changed

+75
-8
lines changed

2 files changed

+75
-8
lines changed

src/main/java/org/springframework/data/redis/connection/convert/Converters.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,13 @@ public RedisClusterNode convert(String source) {
8484
SlotRange range = parseSlotRange(args);
8585
Set<Flag> flags = parseFlags(args);
8686

87+
String portPart = hostAndPort[1];
88+
if(portPart.contains("@")){
89+
portPart = portPart.substring(0, portPart.indexOf('@'));
90+
}
91+
8792
RedisClusterNodeBuilder nodeBuilder = RedisClusterNode.newRedisClusterNode()
88-
.listeningAt(hostAndPort[0], Integer.valueOf(hostAndPort[1])) //
93+
.listeningAt(hostAndPort[0], Integer.valueOf(portPart)) //
8994
.withId(args[ID_INDEX]) //
9095
.promotedAs(flags.contains(Flag.MASTER) ? NodeType.MASTER : NodeType.SLAVE) //
9196
.serving(range) //

src/test/java/org/springframework/data/redis/connection/convert/ConvertersUnitTests.java

Lines changed: 69 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,23 @@
3434
*/
3535
public class ConvertersUnitTests {
3636

37-
private static final String CLUSTER_NODES_RESPONSE = "" //
38-
+ "ef570f86c7b1a953846668debc177a3a16733420 127.0.0.1:6379 myself,master - 0 0 1 connected 0-5460 5602"
37+
private static final String REDIS_3_0_CLUSTER_NODES_RESPONSE = "" //
38+
+ "ef570f86c7b1a953846668debc177a3a16733420 127.0.0.1:6379@16379 myself,master - 0 0 1 connected 0-5460 5602"
3939
+ "\n"
40-
+ "0f2ee5df45d18c50aca07228cc18b1da96fd5e84 127.0.0.1:6380 master - 0 1427718161587 2 connected 5461 5603-10922"
40+
+ "0f2ee5df45d18c50aca07228cc18b1da96fd5e84 127.0.0.1:6380@16380 master - 0 1427718161587 2 connected 5461 5603-10922"
4141
+ "\n"
42-
+ "3b9b8192a874fa8f1f09dbc0ee20afab5738eee7 127.0.0.1:6381 master - 0 1427718161587 3 connected 10923-16383"
42+
+ "3b9b8192a874fa8f1f09dbc0ee20afab5738eee7 127.0.0.1:6381@6381 master - 0 1427718161587 3 connected 10923-16383"
4343
+ "\n"
44-
+ "8cad73f63eb996fedba89f041636f17d88cda075 127.0.0.1:7369 slave ef570f86c7b1a953846668debc177a3a16733420 0 1427718161587 1 connected";
44+
+ "8cad73f63eb996fedba89f041636f17d88cda075 127.0.0.1:7369@7369 slave ef570f86c7b1a953846668debc177a3a16733420 0 1427718161587 1 connected";
45+
46+
private static final String REDIS_3_2_CLUSTER_NODES_RESPONSE = "" //
47+
+ "ef570f86c7b1a953846668debc177a3a16733420 127.0.0.1:6379@16379 myself,master - 0 0 1 connected 0-5460 5602"
48+
+ "\n"
49+
+ "0f2ee5df45d18c50aca07228cc18b1da96fd5e84 127.0.0.1:6380@16380 master - 0 1427718161587 2 connected 5461 5603-10922"
50+
+ "\n"
51+
+ "3b9b8192a874fa8f1f09dbc0ee20afab5738eee7 127.0.0.1:6381@6381 master - 0 1427718161587 3 connected 10923-16383"
52+
+ "\n"
53+
+ "8cad73f63eb996fedba89f041636f17d88cda075 127.0.0.1:7369@7369 slave ef570f86c7b1a953846668debc177a3a16733420 0 1427718161587 1 connected";
4554

4655
private static final String CLUSTER_NODE_WITH_SINGLE_SLOT_RESPONSE = "ef570f86c7b1a953846668debc177a3a16733420 127.0.0.1:6379 myself,master - 0 0 1 connected 3456";
4756

@@ -53,9 +62,62 @@ public class ConvertersUnitTests {
5362
* @see DATAREDIS-315
5463
*/
5564
@Test
56-
public void toSetOfRedisClusterNodesShouldConvertSingleStringNodesResponseCorrectly() {
65+
public void toSetOfRedis30ClusterNodesShouldConvertSingleStringNodesResponseCorrectly() {
66+
67+
Iterator<RedisClusterNode> nodes = Converters.toSetOfRedisClusterNodes(REDIS_3_0_CLUSTER_NODES_RESPONSE).iterator();
68+
69+
RedisClusterNode node = nodes.next(); // 127.0.0.1:6379
70+
assertThat(node.getId(), is("ef570f86c7b1a953846668debc177a3a16733420"));
71+
assertThat(node.getHost(), is("127.0.0.1"));
72+
assertThat(node.getPort(), is(6379));
73+
assertThat(node.getType(), is(NodeType.MASTER));
74+
assertThat(node.getSlotRange().contains(0), is(true));
75+
assertThat(node.getSlotRange().contains(5460), is(true));
76+
assertThat(node.getSlotRange().contains(5461), is(false));
77+
assertThat(node.getSlotRange().contains(5602), is(true));
78+
assertThat(node.getFlags(), hasItems(Flag.MASTER, Flag.MYSELF));
79+
assertThat(node.getLinkState(), is(LinkState.CONNECTED));
80+
81+
node = nodes.next(); // 127.0.0.1:6380
82+
assertThat(node.getId(), is("0f2ee5df45d18c50aca07228cc18b1da96fd5e84"));
83+
assertThat(node.getHost(), is("127.0.0.1"));
84+
assertThat(node.getPort(), is(6380));
85+
assertThat(node.getType(), is(NodeType.MASTER));
86+
assertThat(node.getSlotRange().contains(5460), is(false));
87+
assertThat(node.getSlotRange().contains(5461), is(true));
88+
assertThat(node.getSlotRange().contains(5462), is(false));
89+
assertThat(node.getSlotRange().contains(10922), is(true));
90+
assertThat(node.getFlags(), hasItems(Flag.MASTER));
91+
assertThat(node.getLinkState(), is(LinkState.CONNECTED));
92+
93+
node = nodes.next(); // 127.0.0.1:638
94+
assertThat(node.getId(), is("3b9b8192a874fa8f1f09dbc0ee20afab5738eee7"));
95+
assertThat(node.getHost(), is("127.0.0.1"));
96+
assertThat(node.getPort(), is(6381));
97+
assertThat(node.getType(), is(NodeType.MASTER));
98+
assertThat(node.getSlotRange().contains(10923), is(true));
99+
assertThat(node.getSlotRange().contains(16383), is(true));
100+
assertThat(node.getFlags(), hasItems(Flag.MASTER));
101+
assertThat(node.getLinkState(), is(LinkState.CONNECTED));
102+
103+
node = nodes.next(); // 127.0.0.1:7369
104+
assertThat(node.getId(), is("8cad73f63eb996fedba89f041636f17d88cda075"));
105+
assertThat(node.getHost(), is("127.0.0.1"));
106+
assertThat(node.getPort(), is(7369));
107+
assertThat(node.getType(), is(NodeType.SLAVE));
108+
assertThat(node.getMasterId(), is("ef570f86c7b1a953846668debc177a3a16733420"));
109+
assertThat(node.getSlotRange(), notNullValue());
110+
assertThat(node.getFlags(), hasItems(Flag.SLAVE));
111+
assertThat(node.getLinkState(), is(LinkState.CONNECTED));
112+
}
113+
114+
/**
115+
* @see DATAREDIS-315
116+
*/
117+
@Test
118+
public void toSetOfRedis32ClusterNodesShouldConvertSingleStringNodesResponseCorrectly() {
57119

58-
Iterator<RedisClusterNode> nodes = Converters.toSetOfRedisClusterNodes(CLUSTER_NODES_RESPONSE).iterator();
120+
Iterator<RedisClusterNode> nodes = Converters.toSetOfRedisClusterNodes(REDIS_3_2_CLUSTER_NODES_RESPONSE).iterator();
59121

60122
RedisClusterNode node = nodes.next(); // 127.0.0.1:6379
61123
assertThat(node.getId(), is("ef570f86c7b1a953846668debc177a3a16733420"));

0 commit comments

Comments
 (0)