From 284dfbcca68aca86ef9d9ea45478a13414eab2b4 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Wed, 24 Mar 2021 12:03:32 +0100 Subject: [PATCH] Adapt to changes in Jedis 3.6. Closes #2017 Original Pull Request: #2021 --- .../jedis/JedisClusterStreamCommands.java | 2 +- .../connection/jedis/JedisConnection.java | 2 +- .../jedis/JedisConnectionFactory.java | 20 +++++++++-------- ...ectionFactorySentinelIntegrationTests.java | 2 +- .../JedisConnectionFactoryUnitTests.java | 22 ++++++++++--------- .../jedis/JedisConnectionUnitTests.java | 3 ++- 6 files changed, 28 insertions(+), 23 deletions(-) diff --git a/src/main/java/org/springframework/data/redis/connection/jedis/JedisClusterStreamCommands.java b/src/main/java/org/springframework/data/redis/connection/jedis/JedisClusterStreamCommands.java index 52900832d..20e9ba9fe 100644 --- a/src/main/java/org/springframework/data/redis/connection/jedis/JedisClusterStreamCommands.java +++ b/src/main/java/org/springframework/data/redis/connection/jedis/JedisClusterStreamCommands.java @@ -274,7 +274,7 @@ class JedisClusterStreamCommands implements RedisStreamCommands { try { - List response = connection.getCluster().xpending(key, group, + List response = connection.getCluster().xpending(key, group, JedisConverters.toBytes(getLowerValue(range)), JedisConverters.toBytes(getUpperValue(range)), options.getCount().intValue(), JedisConverters.toBytes(options.getConsumerName())); diff --git a/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnection.java b/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnection.java index 7b5901052..1524bff2d 100644 --- a/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnection.java +++ b/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnection.java @@ -118,7 +118,7 @@ public class JedisConnection extends AbstractRedisConnection { } private static DefaultJedisClientConfig createConfig(int dbIndex, @Nullable String clientName) { - return DefaultJedisClientConfig.builder().databse(dbIndex).clientName(clientName).build(); + return DefaultJedisClientConfig.builder().database(dbIndex).clientName(clientName).build(); } /** diff --git a/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactory.java b/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactory.java index 809962fbb..397b4ab18 100644 --- a/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactory.java +++ b/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactory.java @@ -281,7 +281,6 @@ public class JedisConnectionFactory implements InitializingBean, DisposableBean, // force initialization (see Jedis issue #82) jedis.connect(); - potentiallySetClientName(jedis); return jedis; } catch (Exception ex) { throw new RedisConnectionFailureException("Cannot get Jedis connection", ex); @@ -361,7 +360,7 @@ public class JedisConnectionFactory implements InitializingBean, DisposableBean, builder.connectionTimeoutMillis(getConnectTimeout()); builder.socketTimeoutMillis(getReadTimeout()); - builder.databse(getDatabase()); + builder.database(getDatabase()); if (!ObjectUtils.isEmpty(username)) { builder.user(username); @@ -498,8 +497,15 @@ public class JedisConnectionFactory implements InitializingBean, DisposableBean, } Jedis jedis = fetchJedisConnector(); - JedisConnection connection = (getUsePool() ? new JedisConnection(jedis, pool, getDatabase(), getClientName()) - : new JedisConnection(jedis, null, getDatabase(), getClientName())); + JedisClientConfig sentinelConfig = this.clientConfig; + + SentinelConfiguration sentinelConfiguration = getSentinelConfiguration(); + if (sentinelConfiguration != null) { + sentinelConfig = createClientConfig(null, sentinelConfiguration.getSentinelPassword()); + } + + JedisConnection connection = (getUsePool() ? new JedisConnection(jedis, pool, this.clientConfig, sentinelConfig) + : new JedisConnection(jedis, null, this.clientConfig, sentinelConfig)); connection.setConvertPipelineAndTxResults(convertPipelineAndTxResults); return postProcessConnection(connection); } @@ -896,7 +902,7 @@ public class JedisConnectionFactory implements InitializingBean, DisposableBean, return jedis; } } catch (Exception ex) { - log.warn(String.format("Ping failed for sentinel host:%s", node.getHost()), ex); + log.warn(String.format("Ping failed for sentinel host: %s", node.getHost()), ex); } finally { if (!success && jedis != null) { jedis.close(); @@ -922,10 +928,6 @@ public class JedisConnectionFactory implements InitializingBean, DisposableBean, return convertedNodes; } - private void potentiallySetClientName(Jedis jedis) { - clientConfiguration.getClientName().ifPresent(jedis::clientSetname); - } - private int getReadTimeout() { return Math.toIntExact(clientConfiguration.getReadTimeout().toMillis()); } diff --git a/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactorySentinelIntegrationTests.java b/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactorySentinelIntegrationTests.java index 077793f18..eddbd8464 100644 --- a/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactorySentinelIntegrationTests.java +++ b/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactorySentinelIntegrationTests.java @@ -87,7 +87,7 @@ class JedisConnectionFactorySentinelIntegrationTests { void shouldNotFailOnFirstSentinelDown() { RedisSentinelConfiguration oneDownSentinelConfig = new RedisSentinelConfiguration().master("mymaster") - .sentinel("any.unavailable.host", 26379).sentinel("127.0.0.1", 26379); + .sentinel("127.0.0.1", 1).sentinel("127.0.0.1", 26379); factory = new JedisConnectionFactory(oneDownSentinelConfig); assertThat(factory.getSentinelConnection().isOpen()).isTrue(); diff --git a/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactoryUnitTests.java b/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactoryUnitTests.java index 12244a1f9..ae795fd84 100644 --- a/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactoryUnitTests.java +++ b/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactoryUnitTests.java @@ -18,6 +18,7 @@ package org.springframework.data.redis.connection.jedis; import static org.assertj.core.api.Assertions.*; import static org.mockito.Mockito.*; +import redis.clients.jedis.JedisClientConfig; import redis.clients.jedis.JedisCluster; import redis.clients.jedis.JedisClusterConnectionHandler; import redis.clients.jedis.JedisClusterInfoCache; @@ -292,7 +293,7 @@ class JedisConnectionFactoryUnitTests { assertThat(connectionFactory.getClusterConfiguration()).isSameAs(configuration); } - @Test // DATAREDIS-974 + @Test // DATAREDIS-974, GH-2017 void shouldApplySslConfigWhenCreatingClusterClient() throws NoSuchAlgorithmException { SSLParameters sslParameters = new SSLParameters(); @@ -323,16 +324,17 @@ class JedisConnectionFactoryUnitTests { JedisClusterConnectionHandler connectionHandler = (JedisClusterConnectionHandler) ReflectionTestUtils .getField(cluster, "connectionHandler"); JedisClusterInfoCache cache = (JedisClusterInfoCache) ReflectionTestUtils.getField(connectionHandler, "cache"); + JedisClientConfig clientConfig = (JedisClientConfig) ReflectionTestUtils.getField(cache, "clientConfig"); - assertThat(ReflectionTestUtils.getField(cache, "connectionTimeout")).isEqualTo(60000); - assertThat(ReflectionTestUtils.getField(cache, "soTimeout")).isEqualTo(300000); - assertThat(ReflectionTestUtils.getField(cache, "password")).isNull(); - assertThat(ReflectionTestUtils.getField(cache, "clientName")).isEqualTo("my-client"); - assertThat(ReflectionTestUtils.getField(cache, "ssl")).isEqualTo(true); - assertThat(ReflectionTestUtils.getField(cache, "sslSocketFactory")).isEqualTo(socketFactory); - assertThat(ReflectionTestUtils.getField(cache, "sslParameters")).isEqualTo(sslParameters); - assertThat(ReflectionTestUtils.getField(cache, "hostnameVerifier")).isEqualTo(hostNameVerifier); - assertThat(ReflectionTestUtils.getField(cache, "hostAndPortMap")).isNull(); + assertThat(clientConfig.getConnectionTimeoutMillis()).isEqualTo(60000); + assertThat(clientConfig.getSocketTimeoutMillis()).isEqualTo(300000); + assertThat(clientConfig.getPassword()).isNull(); + assertThat(clientConfig.getClientName()).isEqualTo("my-client"); + assertThat(clientConfig.isSsl()).isEqualTo(true); + assertThat(clientConfig.getSslSocketFactory()).isEqualTo(socketFactory); + assertThat(clientConfig.getSslParameters()).isEqualTo(sslParameters); + assertThat(clientConfig.getHostnameVerifier()).isEqualTo(hostNameVerifier); + assertThat(clientConfig.getHostAndPortMapper()).isNull(); } @Test // DATAREDIS-574 diff --git a/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionUnitTests.java b/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionUnitTests.java index 521950f85..d8533aba1 100644 --- a/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionUnitTests.java +++ b/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionUnitTests.java @@ -38,6 +38,7 @@ import org.springframework.data.redis.connection.RedisServerCommands.ShutdownOpt import org.springframework.data.redis.connection.RedisZSetCommands.Tuple; import org.springframework.data.redis.core.Cursor; import org.springframework.data.redis.core.ScanOptions; +import org.springframework.test.util.ReflectionTestUtils; /** * @author Christoph Strobl @@ -379,7 +380,7 @@ class JedisConnectionUnitTests { MockedClientJedis(String host, Client client) { super(host); - this.client = client; + ReflectionTestUtils.setField(this, "client", client); } } }