Skip to content

Commit fd2c5e7

Browse files
thachlpsazzad16
andcommitted
Custom connection pool to MultiClusterPooledConnectionProvider (#3801)
* Add support for configuring connection pool to MultiClusterPooledConnectionProvider * Add ClusterConfig constructor to include ConnectionPoolConfig, add test * Update src/main/java/redis/clients/jedis/MultiClusterClientConfig.java Co-authored-by: M Sazzadul Hoque <[email protected]> * Update src/main/java/redis/clients/jedis/MultiClusterClientConfig.java Co-authored-by: M Sazzadul Hoque <[email protected]> * Update test * Update src/main/java/redis/clients/jedis/MultiClusterClientConfig.java Co-authored-by: M Sazzadul Hoque <[email protected]> * Update src/test/java/redis/clients/jedis/providers/MultiClusterPooledConnectionProviderTest.java Co-authored-by: M Sazzadul Hoque <[email protected]> * Format testConnectionPoolConfigApplied --------- Co-authored-by: M Sazzadul Hoque <[email protected]>
1 parent 019776c commit fd2c5e7

File tree

3 files changed

+44
-4
lines changed

3 files changed

+44
-4
lines changed

src/main/java/redis/clients/jedis/MultiClusterClientConfig.java

+13
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import java.util.Arrays;
88
import java.util.List;
99

10+
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
1011
import redis.clients.jedis.exceptions.JedisConnectionException;
1112
import redis.clients.jedis.exceptions.JedisValidationException;
1213

@@ -175,12 +176,20 @@ public static class ClusterConfig {
175176
private int priority;
176177
private HostAndPort hostAndPort;
177178
private JedisClientConfig clientConfig;
179+
private GenericObjectPoolConfig<Connection> connectionPoolConfig;
178180

179181
public ClusterConfig(HostAndPort hostAndPort, JedisClientConfig clientConfig) {
180182
this.hostAndPort = hostAndPort;
181183
this.clientConfig = clientConfig;
182184
}
183185

186+
public ClusterConfig(HostAndPort hostAndPort, JedisClientConfig clientConfig,
187+
GenericObjectPoolConfig<Connection> connectionPoolConfig) {
188+
this.hostAndPort = hostAndPort;
189+
this.clientConfig = clientConfig;
190+
this.connectionPoolConfig = connectionPoolConfig;
191+
}
192+
184193
public int getPriority() {
185194
return priority;
186195
}
@@ -196,6 +205,10 @@ public HostAndPort getHostAndPort() {
196205
public JedisClientConfig getJedisClientConfig() {
197206
return clientConfig;
198207
}
208+
209+
public GenericObjectPoolConfig<Connection> getConnectionPoolConfig() {
210+
return connectionPoolConfig;
211+
}
199212
}
200213

201214
public static class Builder {

src/main/java/redis/clients/jedis/providers/MultiClusterPooledConnectionProvider.java

+12-3
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
import java.util.Map;
1515
import java.util.concurrent.ConcurrentHashMap;
1616
import java.util.function.Consumer;
17+
18+
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
1719
import org.slf4j.Logger;
1820
import org.slf4j.LoggerFactory;
1921

@@ -110,6 +112,7 @@ public MultiClusterPooledConnectionProvider(MultiClusterClientConfig multiCluste
110112

111113
ClusterConfig[] clusterConfigs = multiClusterClientConfig.getClusterConfigs();
112114
for (ClusterConfig config : clusterConfigs) {
115+
GenericObjectPoolConfig<Connection> poolConfig = config.getConnectionPoolConfig();
113116

114117
String clusterId = "cluster:" + config.getPriority() + ":" + config.getHostAndPort();
115118

@@ -128,9 +131,15 @@ public MultiClusterPooledConnectionProvider(MultiClusterClientConfig multiCluste
128131
circuitBreakerEventPublisher.onSlowCallRateExceeded(event -> log.error(String.valueOf(event)));
129132
circuitBreakerEventPublisher.onStateTransition(event -> log.warn(String.valueOf(event)));
130133

131-
multiClusterMap.put(config.getPriority(),
132-
new Cluster(new ConnectionPool(config.getHostAndPort(),
133-
config.getJedisClientConfig()), retry, circuitBreaker));
134+
if (poolConfig != null) {
135+
multiClusterMap.put(config.getPriority(),
136+
new Cluster(new ConnectionPool(config.getHostAndPort(),
137+
config.getJedisClientConfig(), poolConfig), retry, circuitBreaker));
138+
} else {
139+
multiClusterMap.put(config.getPriority(),
140+
new Cluster(new ConnectionPool(config.getHostAndPort(),
141+
config.getJedisClientConfig()), retry, circuitBreaker));
142+
}
134143
}
135144

136145
/// --- ///

src/test/java/redis/clients/jedis/providers/MultiClusterPooledConnectionProviderTest.java

+19-1
Original file line numberDiff line numberDiff line change
@@ -131,4 +131,22 @@ public void testSetActiveMultiClusterIndexOutOfRange() {
131131
provider.setActiveMultiClusterIndex(3); // Should throw an exception
132132
}
133133

134-
}
134+
@Test
135+
public void testConnectionPoolConfigApplied() {
136+
ConnectionPoolConfig poolConfig = new ConnectionPoolConfig();
137+
poolConfig.setMaxTotal(8);
138+
poolConfig.setMaxIdle(4);
139+
poolConfig.setMinIdle(1);
140+
ClusterConfig[] clusterConfigs = new ClusterConfig[2];
141+
clusterConfigs[0] = new ClusterConfig(hostAndPort1, DefaultJedisClientConfig.builder().build(), poolConfig);
142+
clusterConfigs[1] = new ClusterConfig(hostAndPort2, DefaultJedisClientConfig.builder().build(), poolConfig);
143+
try (MultiClusterPooledConnectionProvider customProvider = new MultiClusterPooledConnectionProvider(
144+
new MultiClusterClientConfig.Builder(clusterConfigs).build())) {
145+
MultiClusterPooledConnectionProvider.Cluster activeCluster = customProvider.getCluster();
146+
ConnectionPool connectionPool = activeCluster.getConnectionPool();
147+
assertEquals(8, connectionPool.getMaxTotal());
148+
assertEquals(4, connectionPool.getMaxIdle());
149+
assertEquals(1, connectionPool.getMinIdle());
150+
}
151+
}
152+
}

0 commit comments

Comments
 (0)