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
This commit is contained in:
Mark Paluch
2019-10-29 16:36:38 +01:00
committed by Christoph Strobl
parent e41029809a
commit 3a2cf0d3bc
2 changed files with 23 additions and 7 deletions

View File

@@ -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<RedisURI> action) {
action.accept(source);
source.getSentinels().forEach(action);
}
private RedisURI createRedisURIAndApplySettings(String host, int port) {
RedisURI.Builder builder = RedisURI.Builder.redis(host, port);

View File

@@ -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