From 049f4d78ab144350df585eaa8353d4e582a938ee Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Tue, 29 Oct 2019 16:36:38 +0100 Subject: [PATCH] DATAREDIS-1045 - Apply password to all Sentinel endpoints. We now apply the password to all Sentinel endpoints described through RedisURI. We also apply all remaining settings to all Sentinel endpoints to ensure configuration propagation. Original Pull Request: #490 --- .../lettuce/LettuceConnectionFactory.java | 23 ++++++++++++++----- .../LettuceConnectionFactoryUnitTests.java | 7 +++++- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactory.java b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactory.java index 2e4f80c72..4f61967e0 100644 --- a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactory.java +++ b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactory.java @@ -38,6 +38,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.concurrent.TimeUnit; +import java.util.function.Consumer; import java.util.stream.Collectors; import org.apache.commons.logging.Log; @@ -1077,18 +1078,28 @@ public class LettuceConnectionFactory RedisURI redisUri = LettuceConverters.sentinelConfigurationToRedisURI( (org.springframework.data.redis.connection.RedisSentinelConfiguration) configuration); - getRedisPassword().toOptional().ifPresent(redisUri::setPassword); - clientConfiguration.getClientName().ifPresent(redisUri::setClientName); + applyToAll(redisUri, it -> { + + getRedisPassword().toOptional().ifPresent(redisUri::setPassword); + clientConfiguration.getClientName().ifPresent(it::setClientName); + + it.setSsl(clientConfiguration.isUseSsl()); + it.setVerifyPeer(clientConfiguration.isVerifyPeer()); + it.setStartTls(clientConfiguration.isStartTls()); + it.setTimeout(clientConfiguration.getCommandTimeout()); + }); - redisUri.setSsl(clientConfiguration.isUseSsl()); - redisUri.setVerifyPeer(clientConfiguration.isVerifyPeer()); - redisUri.setStartTls(clientConfiguration.isStartTls()); - redisUri.setTimeout(clientConfiguration.getCommandTimeout()); redisUri.setDatabase(getDatabase()); return redisUri; } + private static void applyToAll(RedisURI source, Consumer action) { + + action.accept(source); + source.getSentinels().forEach(action); + } + private RedisURI createRedisURIAndApplySettings(String host, int port) { RedisURI.Builder builder = RedisURI.Builder.redis(host, port); diff --git a/src/test/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactoryUnitTests.java b/src/test/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactoryUnitTests.java index 12e9670de..15fe5a61e 100644 --- a/src/test/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactoryUnitTests.java +++ b/src/test/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactoryUnitTests.java @@ -179,7 +179,7 @@ public class LettuceConnectionFactoryUnitTests { } } - @Test // DATAREDIS-524 + @Test // DATAREDIS-524, DATAREDIS-1045 public void passwordShouldBeSetCorrectlyOnSentinelClient() { LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory( @@ -195,6 +195,11 @@ public class LettuceConnectionFactoryUnitTests { RedisURI redisUri = (RedisURI) getField(client, "redisURI"); assertThat(redisUri.getPassword()).isEqualTo(connectionFactory.getPassword().toCharArray()); + + for (RedisURI sentinel : redisUri.getSentinels()) { + assertThat(sentinel.getPassword()) + .isEqualTo(connectionFactory.getPassword().toCharArray()); + } } @Test // DATAREDIS-462