Skip to content

Commit

Permalink
Merge branch '3.1.x' into 3.2.x
Browse files Browse the repository at this point in the history
Closes gh-40466
  • Loading branch information
wilkinsona committed Apr 22, 2024
2 parents deffda4 + 1476d8d commit 07bb187
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 24 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2012-2023 the original author or authors.
* Copyright 2012-2024 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -113,8 +113,10 @@ public Cluster getCluster() {
}

private Node asNode(String node) {
String[] components = node.split(":");
return new Node(components[0], Integer.parseInt(components[1]));
int portSeparatorIndex = node.lastIndexOf(':');
String host = node.substring(0, portSeparatorIndex);
int port = Integer.parseInt(node.substring(portSeparatorIndex + 1));
return new Node(host, port);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -123,8 +123,8 @@ protected final RedisClusterConfiguration getClusterConfiguration() {
}
RedisProperties.Cluster clusterProperties = this.properties.getCluster();
if (this.connectionDetails.getCluster() != null) {
RedisClusterConfiguration config = new RedisClusterConfiguration(
getNodes(this.connectionDetails.getCluster()));
RedisClusterConfiguration config = new RedisClusterConfiguration();
config.setClusterNodes(getNodes(this.connectionDetails.getCluster()));
if (clusterProperties != null && clusterProperties.getMaxRedirects() != null) {
config.setMaxRedirects(clusterProperties.getMaxRedirects());
}
Expand All @@ -138,8 +138,12 @@ protected final RedisClusterConfiguration getClusterConfiguration() {
return null;
}

private List<String> getNodes(Cluster cluster) {
return cluster.getNodes().stream().map((node) -> "%s:%d".formatted(node.host(), node.port())).toList();
private List<RedisNode> getNodes(Cluster cluster) {
return cluster.getNodes().stream().map(this::asRedisNode).toList();
}

private RedisNode asRedisNode(Node node) {
return new RedisNode(node.host(), node.port());
}

protected final RedisProperties getProperties() {
Expand All @@ -162,7 +166,7 @@ protected boolean isPoolEnabled(Pool pool) {
private List<RedisNode> createSentinels(Sentinel sentinel) {
List<RedisNode> nodes = new ArrayList<>();
for (Node node : sentinel.getNodes()) {
nodes.add(new RedisNode(node.host(), node.port()));
nodes.add(asRedisNode(node));
}
return nodes;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2012-2023 the original author or authors.
* Copyright 2012-2024 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2012-2023 the original author or authors.
* Copyright 2012-2024 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand All @@ -20,6 +20,8 @@

import org.junit.jupiter.api.Test;

import org.springframework.boot.autoconfigure.data.redis.RedisConnectionDetails.Node;

import static org.assertj.core.api.Assertions.assertThat;

/**
Expand Down Expand Up @@ -119,12 +121,21 @@ void standaloneIsConfiguredFromProperties() {
@Test
void clusterIsConfigured() {
RedisProperties.Cluster cluster = new RedisProperties.Cluster();
cluster.setNodes(List.of("first:1111", "second:2222", "third:3333"));
cluster.setNodes(List.of("localhost:1111", "127.0.0.1:2222", "[::1]:3333"));
this.properties.setCluster(cluster);
PropertiesRedisConnectionDetails connectionDetails = new PropertiesRedisConnectionDetails(this.properties);
assertThat(connectionDetails.getCluster().getNodes()).containsExactly(
new RedisConnectionDetails.Node("first", 1111), new RedisConnectionDetails.Node("second", 2222),
new RedisConnectionDetails.Node("third", 3333));
assertThat(connectionDetails.getCluster().getNodes()).containsExactly(new Node("localhost", 1111),
new Node("127.0.0.1", 2222), new Node("[::1]", 3333));
}

@Test
void sentinelIsConfigured() {
RedisProperties.Sentinel sentinel = new RedisProperties.Sentinel();
sentinel.setNodes(List.of("localhost:1111", "127.0.0.1:2222", "[::1]:3333"));
this.properties.setSentinel(sentinel);
PropertiesRedisConnectionDetails connectionDetails = new PropertiesRedisConnectionDetails(this.properties);
assertThat(connectionDetails.getSentinel().getNodes()).containsExactly(new Node("localhost", 1111),
new Node("127.0.0.1", 2222), new Node("[::1]", 3333));
}

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2012-2023 the original author or authors.
* Copyright 2012-2024 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -312,8 +312,13 @@ void testRedisConfigurationWithIpv6Sentinel() {
this.contextRunner
.withPropertyValues("spring.data.redis.sentinel.master:mymaster",
"spring.data.redis.sentinel.nodes:" + StringUtils.collectionToCommaDelimitedString(sentinels))
.run((context) -> assertThat(context.getBean(LettuceConnectionFactory.class).isRedisSentinelAware())
.isTrue());
.run((context) -> {
LettuceConnectionFactory connectionFactory = context.getBean(LettuceConnectionFactory.class);
assertThat(connectionFactory.isRedisSentinelAware()).isTrue();
assertThat(connectionFactory.getSentinelConfiguration().getSentinels()).isNotNull()
.containsExactlyInAnyOrder(new RedisNode("[0:0:0:0:0:0:0:1]", 26379),
new RedisNode("[0:0:0:0:0:0:0:1]", 26380));
});
}

@Test
Expand Down Expand Up @@ -398,19 +403,19 @@ void testRedisSentinelUrlConfiguration() {

@Test
void testRedisConfigurationWithCluster() {
List<String> clusterNodes = Arrays.asList("127.0.0.1:27379", "127.0.0.1:27380");
List<String> clusterNodes = Arrays.asList("127.0.0.1:27379", "127.0.0.1:27380", "[::1]:27381");
this.contextRunner
.withPropertyValues("spring.data.redis.cluster.nodes[0]:" + clusterNodes.get(0),
"spring.data.redis.cluster.nodes[1]:" + clusterNodes.get(1))
"spring.data.redis.cluster.nodes[1]:" + clusterNodes.get(1),
"spring.data.redis.cluster.nodes[2]:" + clusterNodes.get(2))
.run((context) -> {
RedisClusterConfiguration clusterConfiguration = context.getBean(LettuceConnectionFactory.class)
.getClusterConfiguration();
assertThat(clusterConfiguration.getClusterNodes()).hasSize(2);
assertThat(clusterConfiguration.getClusterNodes())
.extracting((node) -> node.getHost() + ":" + node.getPort())
.containsExactlyInAnyOrder("127.0.0.1:27379", "127.0.0.1:27380");
assertThat(clusterConfiguration.getClusterNodes()).hasSize(3);
assertThat(clusterConfiguration.getClusterNodes()).containsExactlyInAnyOrder(
new RedisNode("127.0.0.1", 27379), new RedisNode("127.0.0.1", 27380),
new RedisNode("[::1]", 27381));
});

}

@Test
Expand Down

0 comments on commit 07bb187

Please sign in to comment.