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:
Mark Paluch
2019-03-21 11:43:59 +02:00
committed by Christoph Strobl
parent 2eb7067e8c
commit 50818fbb32
2 changed files with 83 additions and 4 deletions

View File

@@ -21,6 +21,7 @@ import static org.hamcrest.core.IsInstanceOf.*;
import static org.hamcrest.core.IsNull.*;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
import static org.mockito.Mockito.any;
import static org.springframework.data.redis.connection.ClusterTestVariables.*;
import static org.springframework.data.redis.connection.RedisConfiguration.*;
import static org.springframework.data.redis.connection.lettuce.LettuceTestClientResources.*;
@@ -32,6 +33,7 @@ import io.lettuce.core.RedisClient;
import io.lettuce.core.RedisURI;
import io.lettuce.core.api.StatefulConnection;
import io.lettuce.core.api.StatefulRedisConnection;
import io.lettuce.core.cluster.ClusterClientOptions;
import io.lettuce.core.cluster.RedisClusterClient;
import io.lettuce.core.cluster.api.StatefulRedisClusterConnection;
import io.lettuce.core.codec.ByteArrayCodec;
@@ -711,6 +713,49 @@ public class LettuceConnectionFactoryUnitTests {
assertThat(redisUri.getDatabase(), is(equalTo(1)));
}
@Test // DATAREDIS-949
public void maxRedirectsShouldBeSetOnClientOptions() {
RedisClusterConfiguration clusterConfiguration = new RedisClusterConfiguration();
clusterConfiguration.clusterNode("localhost", 1234).setMaxRedirects(42);
LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(clusterConfiguration,
LettuceClientConfiguration.defaultConfiguration());
connectionFactory.afterPropertiesSet();
ConnectionFactoryTracker.add(connectionFactory);
RedisClusterClient client = (RedisClusterClient) getField(connectionFactory, "client");
ClusterClientOptions options = (ClusterClientOptions) client.getOptions();
assertThat(options.getMaxRedirects(), is(42));
assertThat(options.isValidateClusterNodeMembership(), is(true));
assertThat(options.getTimeoutOptions().isApplyConnectionTimeout(), is(true));
}
@Test // DATAREDIS-949
public void maxRedirectsShouldBeSetOnClusterClientOptions() {
RedisClusterConfiguration clusterConfiguration = new RedisClusterConfiguration();
clusterConfiguration.clusterNode("localhost", 1234).setMaxRedirects(42);
LettuceClientConfiguration clientConfiguration = LettuceClientConfiguration.builder()
.clientOptions(ClusterClientOptions.builder().validateClusterNodeMembership(false).build()).build();
LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(clusterConfiguration,
clientConfiguration);
connectionFactory.afterPropertiesSet();
ConnectionFactoryTracker.add(connectionFactory);
RedisClusterClient client = (RedisClusterClient) getField(connectionFactory, "client");
ClusterClientOptions options = (ClusterClientOptions) client.getOptions();
assertThat(options.getMaxRedirects(), is(42));
assertThat(options.isValidateClusterNodeMembership(), is(false));
assertThat(options.getTimeoutOptions().isApplyConnectionTimeout(), is(false));
}
@Data
@AllArgsConstructor
static class CustomRedisConfiguration implements RedisConfiguration, WithHostAndPort {