Skip to content

Commit 2bcdd36

Browse files
committed
Polishing.
Prepare pool for Jedis as well. Introduce generics for Add ticket references to tests. Fix generics for GenericObjectPoolConfig using Lettuce. See #3072
1 parent b7381ac commit 2bcdd36

File tree

6 files changed

+46
-13
lines changed

6 files changed

+46
-13
lines changed

src/main/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactory.java

+6
Original file line numberDiff line numberDiff line change
@@ -730,6 +730,12 @@ public void start() {
730730

731731
if (getUsePool() && !isRedisClusterAware()) {
732732
this.pool = createPool();
733+
734+
try {
735+
this.pool.preparePool();
736+
} catch (Exception ex) {
737+
throw new PoolException("Could not prepare the pool", ex);
738+
}
733739
}
734740

735741
if (isRedisClusterAware()) {

src/main/java/org/springframework/data/redis/connection/lettuce/DefaultLettucePoolingClientConfiguration.java

+4-3
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import io.lettuce.core.ClientOptions;
1919
import io.lettuce.core.ReadFrom;
2020
import io.lettuce.core.SslVerifyMode;
21+
import io.lettuce.core.api.StatefulConnection;
2122
import io.lettuce.core.resource.ClientResources;
2223

2324
import java.time.Duration;
@@ -37,10 +38,10 @@
3738
class DefaultLettucePoolingClientConfiguration implements LettucePoolingClientConfiguration {
3839

3940
private final LettuceClientConfiguration clientConfiguration;
40-
private final GenericObjectPoolConfig poolConfig;
41+
private final GenericObjectPoolConfig<StatefulConnection<?, ?>> poolConfig;
4142

4243
DefaultLettucePoolingClientConfiguration(LettuceClientConfiguration clientConfiguration,
43-
GenericObjectPoolConfig poolConfig) {
44+
GenericObjectPoolConfig<StatefulConnection<?, ?>> poolConfig) {
4445

4546
this.clientConfiguration = clientConfiguration;
4647
this.poolConfig = poolConfig;
@@ -108,7 +109,7 @@ public Duration getShutdownQuietPeriod() {
108109
}
109110

110111
@Override
111-
public GenericObjectPoolConfig getPoolConfig() {
112+
public GenericObjectPoolConfig<StatefulConnection<?, ?>> getPoolConfig() {
112113
return poolConfig;
113114
}
114115
}

src/main/java/org/springframework/data/redis/connection/lettuce/LettucePoolingClientConfiguration.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import io.lettuce.core.ClientOptions;
1919
import io.lettuce.core.ReadFrom;
20+
import io.lettuce.core.api.StatefulConnection;
2021
import io.lettuce.core.resource.ClientResources;
2122

2223
import java.time.Duration;
@@ -39,7 +40,7 @@ public interface LettucePoolingClientConfiguration extends LettuceClientConfigur
3940
/**
4041
* @return the {@link GenericObjectPoolConfig}. Never {@literal null}.
4142
*/
42-
GenericObjectPoolConfig getPoolConfig();
43+
GenericObjectPoolConfig<StatefulConnection<?, ?>> getPoolConfig();
4344

4445
/**
4546
* Creates a new {@link LettucePoolingClientConfigurationBuilder} to build {@link LettucePoolingClientConfiguration}
@@ -91,7 +92,7 @@ static LettucePoolingClientConfiguration defaultConfiguration() {
9192
*/
9293
class LettucePoolingClientConfigurationBuilder extends LettuceClientConfigurationBuilder {
9394

94-
GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
95+
GenericObjectPoolConfig<StatefulConnection<?, ?>> poolConfig = new GenericObjectPoolConfig<>();
9596

9697
LettucePoolingClientConfigurationBuilder() {
9798
super();
@@ -163,7 +164,8 @@ public LettucePoolingClientConfigurationBuilder clientName(String clientName) {
163164
*
164165
* @param poolConfig must not be {@literal null}.
165166
*/
166-
public LettucePoolingClientConfigurationBuilder poolConfig(GenericObjectPoolConfig poolConfig) {
167+
public LettucePoolingClientConfigurationBuilder poolConfig(
168+
GenericObjectPoolConfig<StatefulConnection<?, ?>> poolConfig) {
167169

168170
Assert.notNull(poolConfig, "PoolConfig must not be null");
169171

src/main/java/org/springframework/data/redis/connection/lettuce/LettucePoolingConnectionProvider.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ class LettucePoolingConnectionProvider implements LettuceConnectionProvider, Red
6464
private static final Log log = LogFactory.getLog(LettucePoolingConnectionProvider.class);
6565

6666
private final LettuceConnectionProvider connectionProvider;
67-
private final GenericObjectPoolConfig poolConfig;
67+
private final GenericObjectPoolConfig<StatefulConnection<?, ?>> poolConfig;
6868
private final Map<StatefulConnection<?, ?>, GenericObjectPool<StatefulConnection<?, ?>>> poolRef = new ConcurrentHashMap<>(
6969
32);
7070

@@ -97,7 +97,6 @@ class LettucePoolingConnectionProvider implements LettuceConnectionProvider, Red
9797

9898
try {
9999
newPool.preparePool();
100-
101100
} catch (Exception ex) {
102101
throw new PoolException("Could not prepare the pool", ex);
103102
}

src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactoryUnitTests.java

+27-3
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,12 @@
1919
import static org.mockito.Mockito.*;
2020

2121
import redis.clients.jedis.DefaultJedisClientConfig;
22+
import redis.clients.jedis.Jedis;
2223
import redis.clients.jedis.JedisClientConfig;
2324
import redis.clients.jedis.JedisCluster;
2425
import redis.clients.jedis.JedisPoolConfig;
2526
import redis.clients.jedis.RedisProtocol;
27+
import redis.clients.jedis.util.Pool;
2628

2729
import java.io.IOException;
2830
import java.security.NoSuchAlgorithmException;
@@ -265,6 +267,28 @@ void shouldApplyClientConfiguration() throws NoSuchAlgorithmException {
265267
assertThat(connectionFactory.getPoolConfig()).isSameAs(poolConfig);
266268
}
267269

270+
@Test // GH-3072
271+
void shouldInitializePool() throws Exception {
272+
273+
JedisPoolConfig poolConfig = new JedisPoolConfig();
274+
Pool<Jedis> poolMock = mock(Pool.class);
275+
276+
JedisClientConfiguration configuration = JedisClientConfiguration.builder() //
277+
.usePooling().poolConfig(poolConfig) //
278+
.build();
279+
280+
connectionFactory = new JedisConnectionFactory(new RedisStandaloneConfiguration(), configuration) {
281+
@Override
282+
protected Pool<Jedis> createRedisPool() {
283+
return poolMock;
284+
}
285+
};
286+
287+
connectionFactory.afterPropertiesSet();
288+
289+
verify(poolMock).preparePool();
290+
}
291+
268292
@Test // DATAREDIS-574
269293
void shouldReturnStandaloneConfiguration() {
270294

@@ -382,12 +406,12 @@ void earlyStartupDoesNotStartConnectionFactory() {
382406
private JedisConnectionFactory initSpyedConnectionFactory(RedisSentinelConfiguration sentinelConfiguration,
383407
@Nullable JedisPoolConfig poolConfig) {
384408

409+
Pool<Jedis> poolMock = mock(Pool.class);
385410
// we have to use a spy here as jedis would start connecting to redis sentinels when the pool is created.
386411
JedisConnectionFactory connectionFactorySpy = spy(new JedisConnectionFactory(sentinelConfiguration, poolConfig));
387412

388-
doReturn(null).when(connectionFactorySpy).createRedisSentinelPool(any(RedisSentinelConfiguration.class));
389-
390-
doReturn(null).when(connectionFactorySpy).createRedisPool();
413+
doReturn(poolMock).when(connectionFactorySpy).createRedisSentinelPool(any(RedisSentinelConfiguration.class));
414+
doReturn(poolMock).when(connectionFactorySpy).createRedisPool();
391415

392416
return connectionFactorySpy;
393417
}

src/test/java/org/springframework/data/redis/connection/lettuce/LettucePoolingConnectionProviderUnitTests.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import static org.mockito.Mockito.*;
1919

20+
import io.lettuce.core.api.StatefulConnection;
2021
import io.lettuce.core.api.StatefulRedisConnection;
2122
import io.lettuce.core.api.async.RedisAsyncCommands;
2223

@@ -74,10 +75,10 @@ void shouldDiscardTransactionOnReleaseOnActiveTransaction() {
7475
verify(commandsMock).discard();
7576
}
7677

77-
@Test
78+
@Test // GH-3072
7879
void shouldPrepareThePool() {
7980

80-
GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
81+
GenericObjectPoolConfig<StatefulConnection<?, ?>> poolConfig = new GenericObjectPoolConfig<>();
8182
poolConfig.setMinIdle(5);
8283
poolConfig.setMaxIdle(8);
8384
poolConfig.setMaxTotal(10);

0 commit comments

Comments
 (0)