DATAREDIS-949 - Consider max-redirects using Lettuce.
LettuceConnectionFactory now considers the maximal redirection limit for Redis Cluster redirections. Previously, the max-redirects limit was not configured in Lettuce. Original Pull Request: #417
This commit is contained in:
committed by
Christoph Strobl
parent
2eb7067e8c
commit
50818fbb32
@@ -979,7 +979,8 @@ public class LettuceConnectionFactory
|
||||
if (isClusterAware()) {
|
||||
|
||||
List<RedisURI> initialUris = new ArrayList<>();
|
||||
for (RedisNode node : ((ClusterConfiguration) configuration).getClusterNodes()) {
|
||||
ClusterConfiguration configuration = (ClusterConfiguration) this.configuration;
|
||||
for (RedisNode node : configuration.getClusterNodes()) {
|
||||
initialUris.add(createRedisURIAndApplySettings(node.getHost(), node.getPort()));
|
||||
}
|
||||
|
||||
@@ -987,9 +988,7 @@ public class LettuceConnectionFactory
|
||||
.map(clientResources -> RedisClusterClient.create(clientResources, initialUris)) //
|
||||
.orElseGet(() -> RedisClusterClient.create(initialUris));
|
||||
|
||||
clientConfiguration.getClientOptions() //
|
||||
.filter(clientOptions -> clientOptions instanceof ClusterClientOptions) //
|
||||
.ifPresent(clientOptions -> clusterClient.setOptions((ClusterClientOptions) clientOptions));
|
||||
clusterClient.setOptions(getClusterClientOptions(configuration));
|
||||
|
||||
return clusterClient;
|
||||
}
|
||||
@@ -1006,6 +1005,41 @@ public class LettuceConnectionFactory
|
||||
return redisClient;
|
||||
}
|
||||
|
||||
private ClusterClientOptions getClusterClientOptions(ClusterConfiguration configuration) {
|
||||
|
||||
Optional<ClientOptions> clientOptions = clientConfiguration.getClientOptions();
|
||||
ClusterClientOptions clusterClientOptions = clientOptions //
|
||||
.filter(ClusterClientOptions.class::isInstance) //
|
||||
.map(ClusterClientOptions.class::cast) //
|
||||
.orElseGet(() -> {
|
||||
return clientOptions //
|
||||
.map(LettuceConnectionFactory::toClusterClientOptions) //
|
||||
.orElseGet(ClusterClientOptions::create);
|
||||
});
|
||||
|
||||
if (configuration.getMaxRedirects() != null) {
|
||||
return clusterClientOptions.mutate().maxRedirects(configuration.getMaxRedirects()).build();
|
||||
}
|
||||
|
||||
return clusterClientOptions;
|
||||
}
|
||||
|
||||
// TODO: Replace with Lettuce 5.1.6 ClusterClientOptions.builder(ClientOptions)
|
||||
private static ClusterClientOptions toClusterClientOptions(ClientOptions it) {
|
||||
|
||||
return ClusterClientOptions.builder() //
|
||||
.autoReconnect(it.isAutoReconnect()) //
|
||||
.cancelCommandsOnReconnectFailure(it.isCancelCommandsOnReconnectFailure()) //
|
||||
.disconnectedBehavior(it.getDisconnectedBehavior()) //
|
||||
.pingBeforeActivateConnection(it.isPingBeforeActivateConnection()) //
|
||||
.requestQueueSize(it.getRequestQueueSize()) //
|
||||
.socketOptions(it.getSocketOptions()) //
|
||||
.sslOptions(it.getSslOptions()) //
|
||||
.suspendReconnectOnProtocolFailure(it.isSuspendReconnectOnProtocolFailure())//
|
||||
.timeoutOptions(it.getTimeoutOptions()) //
|
||||
.build();
|
||||
}
|
||||
|
||||
private RedisURI getSentinelRedisURI() {
|
||||
|
||||
RedisURI redisUri = LettuceConverters.sentinelConfigurationToRedisURI(
|
||||
|
||||
Reference in New Issue
Block a user