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 98ec282faf..b43338ca36 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 @@ -63,6 +63,7 @@ * @author daihuabin * @author John Blum * @author Sorokin Evgeniy + * @author Habip Kenan Uskudar */ public abstract class Converters { @@ -569,8 +570,9 @@ enum ClusterNodesConverter implements Converter { @Override public RedisClusterNode convert(String source) { - - String[] args = source.split(" "); + String filteredSource = source.replace(", ", " "); + + String[] args = filteredSource.split(" "); Matcher matcher = clusterEndpointPattern.matcher(args[HOST_PORT_INDEX]); 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 74d3f7df8d..175a6eea2d 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 @@ -37,6 +37,7 @@ * @author Christoph Strobl * @author Mark Paluch * @author Sorokin Evgeniy + * @author Habip Kenan Uskudar */ class ConvertersUnitTests { @@ -72,6 +73,8 @@ class ConvertersUnitTests { private static final String CLUSTER_NODE_WITH_SINGLE_INVALID_IPV6_HOST = "67adfe3df1058896e3cb49d2863e0f70e7e159fa 2a02:6b8:c67:9c:0:6d8b:33da:5a2c: master,nofailover - 0 1692108412315 1 connected 0-5460"; + private static final String CLUSTER_NODE_ENTRY_WITH_EMPTY_HUMAN_READABLE_CLUSTER_NAME_IN_GCP_MEMORY_STORE = "3765733728631672640db35fd2f04743c03119c6 10.180.0.33:11003@16379, master - 0 1708041426947 2 connected 5462-10922"; + @Test // DATAREDIS-315 void toSetOfRedis30ClusterNodesShouldConvertSingleStringNodesResponseCorrectly() { @@ -263,6 +266,22 @@ void toClusterNodeWithIPv6HostnameSquareBrackets() { assertThat(node.getSlotRange().getSlots().size()).isEqualTo(5461); } + @Test // DATAREDIS-2862 + void toSetOfRedisClusterNodesShouldConvertNodesWithEmptyHumanReadableClusterNameInGcpMemoryStoreCorrectly() { + + RedisClusterNode node = Converters.toClusterNode(CLUSTER_NODE_ENTRY_WITH_EMPTY_HUMAN_READABLE_CLUSTER_NAME_IN_GCP_MEMORY_STORE); + + assertThat(node.getId()).isEqualTo("3765733728631672640db35fd2f04743c03119c6"); + assertThat(node.getHost()).isEqualTo("10.180.0.33"); + assertThat(node.hasValidHost()).isTrue(); + assertThat(node.getPort()).isEqualTo(11003); + assertThat(node.getType()).isEqualTo(NodeType.MASTER); + assertThat(node.getFlags()).contains(Flag.MASTER); + assertThat(node.getLinkState()).isEqualTo(LinkState.CONNECTED); + assertThat(node.getSlotRange().contains(5462)).isTrue(); + assertThat(node.getSlotRange().contains(10922)).isTrue(); + } + @Test // GH-2678 void toClusterNodeWithInvalidIPv6Hostname() { assertThatIllegalArgumentException()