diff --git a/pom.xml b/pom.xml index 8657b1992a..dcc27879ec 100644 --- a/pom.xml +++ b/pom.xml @@ -1,11 +1,13 @@ - + 4.0.0 org.springframework.data spring-data-redis - 2.6.0-SNAPSHOT + 2.6.0-2103-SNAPSHOT Spring Data Redis 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 f09edff5ab..f7af5cde45 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 @@ -319,7 +319,7 @@ protected JedisConnection postProcessConnection(JedisConnection connection) { */ public void afterPropertiesSet() { - clientConfig = createClientConfig(getRedisUsername(), getRedisPassword()); + clientConfig = createClientConfig(getDatabase(), getRedisUsername(), getRedisPassword()); if (shardInfo == null && clientConfiguration instanceof MutableJedisClientConfiguration) { @@ -360,7 +360,11 @@ public void afterPropertiesSet() { this.initialized = true; } - private JedisClientConfig createClientConfig(@Nullable String username, RedisPassword password) { + private JedisClientConfig createSentinelClientConfig(SentinelConfiguration sentinelConfiguration) { + return createClientConfig(0, null, sentinelConfiguration.getSentinelPassword()); + } + + private JedisClientConfig createClientConfig(int database, @Nullable String username, RedisPassword password) { DefaultJedisClientConfig.Builder builder = DefaultJedisClientConfig.builder(); @@ -368,7 +372,7 @@ private JedisClientConfig createClientConfig(@Nullable String username, RedisPas builder.connectionTimeoutMillis(getConnectTimeout()); builder.socketTimeoutMillis(getReadTimeout()); - builder.database(getDatabase()); + builder.database(database); if (!ObjectUtils.isEmpty(username)) { builder.user(username); @@ -405,9 +409,8 @@ private Pool createPool() { protected Pool createRedisSentinelPool(RedisSentinelConfiguration config) { GenericObjectPoolConfig poolConfig = getPoolConfig() != null ? getPoolConfig() : new JedisPoolConfig(); - String sentinelUser = null; - JedisClientConfig sentinelConfig = createClientConfig(sentinelUser, config.getSentinelPassword()); + JedisClientConfig sentinelConfig = createSentinelClientConfig(config); return new JedisSentinelPool(config.getMaster().getName(), convertToJedisSentinelSet(config.getSentinels()), poolConfig, this.clientConfig, sentinelConfig); } @@ -513,7 +516,7 @@ public RedisConnection getConnection() { SentinelConfiguration sentinelConfiguration = getSentinelConfiguration(); if (sentinelConfiguration != null) { - sentinelConfig = createClientConfig(null, sentinelConfiguration.getSentinelPassword()); + sentinelConfig = createSentinelClientConfig(sentinelConfiguration); } JedisConnection connection = (getUsePool() ? new JedisConnection(jedis, pool, this.clientConfig, sentinelConfig) @@ -904,7 +907,7 @@ private Jedis getActiveSentinel() { Assert.isTrue(RedisConfiguration.isSentinelConfiguration(configuration), "SentinelConfig must not be null!"); SentinelConfiguration sentinelConfiguration = (SentinelConfiguration) configuration; - JedisClientConfig clientConfig = createClientConfig(null, sentinelConfiguration.getSentinelPassword()); + JedisClientConfig clientConfig = createSentinelClientConfig(sentinelConfiguration); for (RedisNode node : sentinelConfiguration.getSentinels()) { Jedis jedis = null; @@ -929,6 +932,7 @@ private Jedis getActiveSentinel() { throw new InvalidDataAccessResourceUsageException("No Sentinel found"); } + private static Set convertToJedisSentinelSet(Collection nodes) { if (CollectionUtils.isEmpty(nodes)) { 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 da4e7fc173..eaf8d7a4ea 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 @@ -17,11 +17,14 @@ import static org.assertj.core.api.Assertions.*; +import java.io.IOException; + import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; import org.springframework.data.redis.connection.RedisConnection; import org.springframework.data.redis.connection.RedisSentinelConfiguration; +import org.springframework.data.redis.connection.RedisSentinelConnection; import org.springframework.data.redis.test.condition.EnabledOnRedisSentinelAvailable; import org.springframework.lang.Nullable; @@ -48,6 +51,40 @@ void tearDown() { } } + @Test // GH-2103 + void shouldConnectDataNodeCorrectly() { + + RedisSentinelConfiguration configuration = new RedisSentinelConfiguration().master("mymaster") + .sentinel("127.0.0.1", 26379).sentinel("127.0.0.1", 26380); + configuration.setDatabase(5); + + factory = new JedisConnectionFactory(configuration); + factory.afterPropertiesSet(); + + RedisConnection connection = factory.getConnection(); + connection.flushAll(); + connection.set("key5".getBytes(), "value5".getBytes()); + + connection.select(0); + assertThat(connection.exists("key5".getBytes())).isFalse(); + connection.close(); + } + + @Test // GH-2103 + void shouldConnectSentinelNodeCorrectly() throws IOException { + + RedisSentinelConfiguration configuration = new RedisSentinelConfiguration().master("mymaster") + .sentinel("127.0.0.1", 26379).sentinel("127.0.0.1", 26380); + configuration.setDatabase(5); + + factory = new JedisConnectionFactory(configuration); + factory.afterPropertiesSet(); + + RedisSentinelConnection sentinelConnection = factory.getSentinelConnection(); + assertThat(sentinelConnection.masters()).isNotNull(); + sentinelConnection.close(); + } + @Test // DATAREDIS-574, DATAREDIS-765 void shouldInitializeWithSentinelConfiguration() {