From 1797c01eed6db1cd4ba44192d910bd1f55436799 Mon Sep 17 00:00:00 2001 From: lightistor Date: Fri, 16 Feb 2024 02:59:23 +0300 Subject: [PATCH 1/2] Update Converters.java Clean extra character in Cluster Node Line Entry for Google Cloud Platform Memory Store Redis when using the Jedis Connector. Sample entries causing ClusterNode information does not define host and port: 3765733728631672640db35fd2f04743c03119c6 10.180.0.33:11003@16379, master - 0 1708041426947 2 connected 5462-10922 --- .../data/redis/connection/convert/Converters.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) 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..141587abe2 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 @@ -569,8 +569,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]); From efedefdb6f4ba6b469797f2be516b1d62654ec9a Mon Sep 17 00:00:00 2001 From: lightistor Date: Fri, 16 Feb 2024 02:59:23 +0300 Subject: [PATCH 2/2] Update Converters.java fix typo in Converters.java add unit test for the replace for cleaning empty human readable field Clean extra character in Cluster Node Line Entry for Google Cloud Platform Memory Store Redis when using the Jedis Connector. Sample entries causing ClusterNode information does not define host and port: 3765733728631672640db35fd2f04743c03119c6 10.180.0.33:11003@16379, master - 0 1708041426947 2 connected 5462-10922 --- .../redis/connection/convert/Converters.java | 6 ++++-- .../convert/ConvertersUnitTests.java | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) 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()