Skip to content

Commit 396ab79

Browse files
committed
Extend Config pattern
1 parent 8b92bd5 commit 396ab79

15 files changed

+383
-178
lines changed

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,11 @@ public BinaryJedis(final URI uri, final int connectionTimeout, final int soTimeo
193193
client.setInfiniteSoTimeout(infiniteSoTimeout);
194194
}
195195

196+
public BinaryJedis(final URI uri, final JedisSocketConfig config, final int infiniteSoTimeout) {
197+
this(uri, config);
198+
client.setInfiniteSoTimeout(infiniteSoTimeout);
199+
}
200+
196201
public BinaryJedis(final URI uri, JedisSocketConfig config) {
197202
if (!JedisURIHelper.isValid(uri)) {
198203
throw new InvalidURIException(String.format("Cannot open Redis connection due invalid URI \"%s\".", uri.toString()));

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -110,10 +110,9 @@ public BinaryJedisCluster(Set<HostAndPort> jedisClusterNode, int connectionTimeo
110110
}
111111

112112
public BinaryJedisCluster(Set<HostAndPort> jedisClusterNode, JedisSocketConfig socketConfig,
113-
int infiniteSoTimeout, int maxAttempts, String user, String password, String clientName,
114-
GenericObjectPoolConfig poolConfig) {
113+
JedisClientConfig clientConfig, int maxAttempts, GenericObjectPoolConfig poolConfig) {
115114
this.connectionHandler = new JedisSlotBasedConnectionHandler(jedisClusterNode, poolConfig,
116-
socketConfig, infiniteSoTimeout, user, password, clientName);
115+
socketConfig, clientConfig);
117116
this.maxAttempts = maxAttempts;
118117
}
119118

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
package redis.clients.jedis;
2+
3+
public class DefaultJedisClientConfig implements JedisClientConfig {
4+
5+
private final int infiniteSoTimeout;
6+
private final String user;
7+
private final String password;
8+
private final int database;
9+
private final String clientName;
10+
11+
private DefaultJedisClientConfig(int infiniteSoTimeout,
12+
String user, String password, int database, String clientName) {
13+
this.infiniteSoTimeout = infiniteSoTimeout;
14+
this.user = user;
15+
this.password = password;
16+
this.database = database;
17+
this.clientName = clientName;
18+
}
19+
20+
public static Builder builder() {
21+
return new Builder();
22+
}
23+
24+
@Override
25+
public int getInfiniteSoTimeout() {
26+
return infiniteSoTimeout;
27+
}
28+
29+
@Override
30+
public String getUser() {
31+
return user;
32+
}
33+
34+
@Override
35+
public String getPassword() {
36+
return password;
37+
}
38+
39+
@Override
40+
public int getDatabase() {
41+
return database;
42+
}
43+
44+
@Override
45+
public String getClientName() {
46+
return clientName;
47+
}
48+
49+
public static class Builder {
50+
51+
private int infiniteSoTimeout = 0;
52+
53+
private String user = null;
54+
private String password = null;
55+
private int databse = Protocol.DEFAULT_DATABASE;
56+
private String clinetName = null;
57+
58+
private Builder() {
59+
}
60+
61+
public DefaultJedisClientConfig build() {
62+
return new DefaultJedisClientConfig(infiniteSoTimeout, user, password, databse, clinetName);
63+
}
64+
65+
public Builder withInfiniteSoTimeout(int infiniteSoTimeout) {
66+
this.infiniteSoTimeout = infiniteSoTimeout;
67+
return this;
68+
}
69+
70+
public Builder withUser(String user) {
71+
this.user = user;
72+
return this;
73+
}
74+
75+
public Builder withPassword(String password) {
76+
this.password = password;
77+
return this;
78+
}
79+
80+
public Builder withDatabse(int databse) {
81+
this.databse = databse;
82+
return this;
83+
}
84+
85+
public Builder withClinetName(String clinetName) {
86+
this.clinetName = clinetName;
87+
return this;
88+
}
89+
90+
public int getInfiniteSoTimeout() {
91+
return infiniteSoTimeout;
92+
}
93+
94+
public String getUser() {
95+
return user;
96+
}
97+
98+
public String getPassword() {
99+
return password;
100+
}
101+
102+
public int getDatabse() {
103+
return databse;
104+
}
105+
106+
public String getClinetName() {
107+
return clinetName;
108+
}
109+
110+
}
111+
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,10 @@ public Jedis(final URI uri, final int connectionTimeout, final int soTimeout,
151151
super(uri, connectionTimeout, soTimeout, infiniteSoTimeout, sslSocketFactory, sslParameters, hostnameVerifier);
152152
}
153153

154+
public Jedis(final URI uri, JedisSocketConfig config, final int infiniteSoTimeout) {
155+
super(uri, config, infiniteSoTimeout);
156+
}
157+
154158
public Jedis(final URI uri, JedisSocketConfig config) {
155159
super(uri, config);
156160
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package redis.clients.jedis;
2+
3+
public interface JedisClientConfig {
4+
5+
int getInfiniteSoTimeout();
6+
7+
String getUser();
8+
9+
String getPassword();
10+
11+
int getDatabase();
12+
13+
String getClientName();
14+
}

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

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,11 @@ public JedisCluster(HostAndPort node, int connectionTimeout, int soTimeout,
9999
ssl, sslSocketFactory, sslParameters, hostnameVerifier, hostAndPortMap);
100100
}
101101

102+
public JedisCluster(HostAndPort node, final JedisSocketConfig socketConfig,
103+
final JedisClientConfig clientConfig, int maxAttempts, final GenericObjectPoolConfig poolConfig) {
104+
this(Collections.singleton(node), socketConfig, clientConfig, maxAttempts, poolConfig);
105+
}
106+
102107
public JedisCluster(Set<HostAndPort> nodes) {
103108
this(nodes, DEFAULT_TIMEOUT);
104109
}
@@ -193,10 +198,9 @@ public JedisCluster(Set<HostAndPort> jedisClusterNode, int connectionTimeout, in
193198
clientName, poolConfig, ssl, sslSocketFactory, sslParameters, hostnameVerifier, hostAndPortMap);
194199
}
195200

196-
public JedisCluster(Set<HostAndPort> jedisClusterNode, JedisSocketConfig socketConfig,
197-
int infiniteSoTimeout, int maxAttempts, String user, String password, String clientName,
198-
final GenericObjectPoolConfig poolConfig) {
199-
super(jedisClusterNode, socketConfig, infiniteSoTimeout, maxAttempts, user, password, clientName, poolConfig);
201+
public JedisCluster(Set<HostAndPort> nodes, final JedisSocketConfig socketConfig,
202+
final JedisClientConfig clientConfig, int maxAttempts, final GenericObjectPoolConfig poolConfig) {
203+
super(nodes, socketConfig, clientConfig, maxAttempts, poolConfig);
200204
}
201205

202206
@Override

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

Lines changed: 16 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,6 @@ public JedisClusterConnectionHandler(Set<HostAndPort> nodes, final GenericObject
3434
this(nodes, poolConfig, connectionTimeout, soTimeout, infiniteSoTimeout, user, password, clientName, false, null, null, null, null);
3535
}
3636

37-
public JedisClusterConnectionHandler(Set<HostAndPort> nodes, final GenericObjectPoolConfig poolConfig,
38-
final JedisSocketConfig socketConfig, String user, String password, String clientName) {
39-
this(nodes, poolConfig, socketConfig, 0, user, password, clientName);
40-
}
41-
4237
@Deprecated
4338
public JedisClusterConnectionHandler(Set<HostAndPort> nodes, GenericObjectPoolConfig poolConfig,
4439
int connectionTimeout, int soTimeout, String password, String clientName,
@@ -47,13 +42,6 @@ public JedisClusterConnectionHandler(Set<HostAndPort> nodes, GenericObjectPoolCo
4742
this(nodes, poolConfig, connectionTimeout, soTimeout, null, password, clientName, ssl, sslSocketFactory, sslParameters, hostnameVerifier, portMap);
4843
}
4944

50-
public JedisClusterConnectionHandler(Set<HostAndPort> nodes, GenericObjectPoolConfig poolConfig,
51-
int connectionTimeout, int soTimeout, String password, String clientName,
52-
boolean ssl, SSLSocketFactory sslSocketFactory, SSLParameters sslParameters,
53-
HostnameVerifier hostnameVerifier, HostAndPortMapper portMap) {
54-
this(nodes, poolConfig, connectionTimeout, soTimeout, null, password, clientName, ssl, sslSocketFactory, sslParameters, hostnameVerifier, portMap);
55-
}
56-
5745
@Deprecated
5846
public JedisClusterConnectionHandler(Set<HostAndPort> nodes, GenericObjectPoolConfig poolConfig,
5947
int connectionTimeout, int soTimeout, String user, String password, String clientName,
@@ -62,13 +50,6 @@ public JedisClusterConnectionHandler(Set<HostAndPort> nodes, GenericObjectPoolCo
6250
this(nodes, poolConfig, connectionTimeout, soTimeout, 0, user, password, clientName, ssl, sslSocketFactory, sslParameters, hostnameVerifier, portMap);
6351
}
6452

65-
public JedisClusterConnectionHandler(Set<HostAndPort> nodes, GenericObjectPoolConfig poolConfig,
66-
int connectionTimeout, int soTimeout, String user, String password, String clientName,
67-
boolean ssl, SSLSocketFactory sslSocketFactory, SSLParameters sslParameters,
68-
HostnameVerifier hostnameVerifier, HostAndPortMapper portMap) {
69-
this(nodes, poolConfig, connectionTimeout, soTimeout, 0, user, password, clientName, ssl, sslSocketFactory, sslParameters, hostnameVerifier, portMap);
70-
}
71-
7253
@Deprecated
7354
public JedisClusterConnectionHandler(Set<HostAndPort> nodes, final GenericObjectPoolConfig poolConfig,
7455
int connectionTimeout, int soTimeout, int infiniteSoTimeout, String user, String password, String clientName,
@@ -85,29 +66,20 @@ public JedisClusterConnectionHandler(Set<HostAndPort> nodes, final GenericObject
8566
infiniteSoTimeout, user, password, clientName);
8667
}
8768

88-
public JedisClusterConnectionHandler(Set<HostAndPort> nodes, final GenericObjectPoolConfig poolConfig,
89-
int connectionTimeout, int soTimeout, int infiniteSoTimeout, String user, String password, String clientName,
90-
boolean ssl, SSLSocketFactory sslSocketFactory, SSLParameters sslParameters,
91-
HostnameVerifier hostnameVerifier, HostAndPortMapper portMap) {
92-
this(nodes, poolConfig,
93-
DefaultJedisSocketConfig.builder().withConnectionTimeout(connectionTimeout).withSoTimeout(soTimeout)
94-
.withSsl(ssl).withSslSocketFactory(sslSocketFactory).withSslParameters(sslParameters)
95-
.withHostnameVerifier(hostnameVerifier).withHostAndPortMapper(portMap).build(),
96-
infiniteSoTimeout, user, password, clientName);
97-
}
98-
9969
@Deprecated
10070
public JedisClusterConnectionHandler(Set<HostAndPort> nodes, final JedisSocketConfig seedNodesSocketConfig,
10171
final GenericObjectPoolConfig poolConfig, final JedisSocketConfig clusterNodesSocketConfig,
10272
int infiniteSoTimeout, String user, String password, String clientName) {
103-
this.cache = new JedisClusterInfoCache(poolConfig, clusterNodesSocketConfig, infiniteSoTimeout, user, password, clientName);
104-
initializeSlotsCache(nodes, seedNodesSocketConfig, infiniteSoTimeout, user, password, clientName);
73+
final JedisClientConfig clientConfig = DefaultJedisClientConfig.builder().withInfiniteSoTimeout(infiniteSoTimeout)
74+
.withUser(user).withPassword(password).withClinetName(clientName).build();
75+
this.cache = new JedisClusterInfoCache(poolConfig, clusterNodesSocketConfig, clientConfig);
76+
initializeSlotsCache(nodes, seedNodesSocketConfig, clientConfig);
10577
}
10678

10779
public JedisClusterConnectionHandler(Set<HostAndPort> nodes, final GenericObjectPoolConfig poolConfig,
108-
final JedisSocketConfig socketConfig, int infiniteSoTimeout, String user, String password, String clientName) {
109-
this.cache = new JedisClusterInfoCache(poolConfig, socketConfig, infiniteSoTimeout, user, password, clientName);
110-
initializeSlotsCache(nodes, socketConfig, infiniteSoTimeout, user, password, clientName);
80+
final JedisSocketConfig socketConfig, final JedisClientConfig clientConfig) {
81+
this.cache = new JedisClusterInfoCache(poolConfig, socketConfig, clientConfig);
82+
initializeSlotsCache(nodes, socketConfig, clientConfig);
11183
}
11284

11385
abstract Jedis getConnection();
@@ -122,18 +94,18 @@ public Map<String, JedisPool> getNodes() {
12294
return cache.getNodes();
12395
}
12496

125-
private void initializeSlotsCache(Set<HostAndPort> startNodes, final JedisSocketConfig socketConfig,
126-
int infiniteSoTimeout, String user, String password, String clientName) {
97+
private void initializeSlotsCache(Set<HostAndPort> startNodes, JedisSocketConfig socketConfig,
98+
JedisClientConfig clientConfig) {
12799

128100
for (HostAndPort hostAndPort : startNodes) {
129-
try (Jedis jedis = new Jedis(hostAndPort, socketConfig, infiniteSoTimeout)) {
130-
if (user != null) {
131-
jedis.auth(user, password);
132-
} else if (password != null) {
133-
jedis.auth(password);
101+
try (Jedis jedis = new Jedis(hostAndPort, socketConfig, clientConfig.getInfiniteSoTimeout())) {
102+
if (clientConfig.getUser() != null) {
103+
jedis.auth(clientConfig.getUser(), clientConfig.getPassword());
104+
} else if (clientConfig.getPassword() != null) {
105+
jedis.auth(clientConfig.getPassword());
134106
}
135-
if (clientName != null) {
136-
jedis.clientSetname(clientName);
107+
if (clientConfig.getClientName() != null) {
108+
jedis.clientSetname(clientConfig.getClientName());
137109
}
138110
cache.discoverClusterNodesAndSlots(jedis);
139111
return;

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

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,10 @@ public class JedisClusterInfoCache {
2525
private final Lock r = rwl.readLock();
2626
private final Lock w = rwl.writeLock();
2727
private volatile boolean rediscovering;
28-
private final GenericObjectPoolConfig poolConfig;
2928

29+
private final GenericObjectPoolConfig poolConfig;
3030
private final JedisSocketConfig socketConfig;
31-
private int infiniteSoTimeout;
32-
private String user;
33-
private String password;
34-
private String clientName;
31+
private final JedisClientConfig clientConfig;
3532

3633
private static final int MASTER_NODE_INDEX = 2;
3734

@@ -105,21 +102,21 @@ public JedisClusterInfoCache(final GenericObjectPoolConfig poolConfig,
105102
final String user, final String password, final String clientName, boolean ssl,
106103
SSLSocketFactory sslSocketFactory, SSLParameters sslParameters,
107104
HostnameVerifier hostnameVerifier, HostAndPortMapper hostAndPortMap) {
108-
this(poolConfig, DefaultJedisSocketConfig.builder().withConnectionTimeout(connectionTimeout)
109-
.withSoTimeout(soTimeout).withSsl(ssl).withSslSocketFactory(sslSocketFactory)
110-
.withSslParameters(sslParameters).withHostnameVerifier(hostnameVerifier)
111-
.withHostAndPortMapper(hostAndPortMap).build(), infiniteSoTimeout, user, password, clientName);
105+
this(poolConfig,
106+
DefaultJedisSocketConfig.builder().withConnectionTimeout(connectionTimeout)
107+
.withSoTimeout(soTimeout).withSsl(ssl).withSslSocketFactory(sslSocketFactory)
108+
.withSslParameters(sslParameters) .withHostnameVerifier(hostnameVerifier)
109+
.withHostAndPortMapper(hostAndPortMap).build(),
110+
DefaultJedisClientConfig.builder().withInfiniteSoTimeout(infiniteSoTimeout)
111+
.withUser(user).withPassword(password).withClinetName(clientName).build()
112+
);
112113
}
113114

114115
public JedisClusterInfoCache(final GenericObjectPoolConfig poolConfig,
115-
final JedisSocketConfig socketConfig, final int infiniteSoTimeout,
116-
final String user, final String password, final String clientName) {
116+
final JedisSocketConfig socketConfig, final JedisClientConfig clientConfig) {
117117
this.poolConfig = poolConfig;
118118
this.socketConfig = socketConfig;
119-
this.infiniteSoTimeout = infiniteSoTimeout;
120-
this.user = user;
121-
this.password = password;
122-
this.clientName = clientName;
119+
this.clientConfig = clientConfig;
123120
}
124121

125122
public void discoverClusterNodesAndSlots(Jedis jedis) {
@@ -238,7 +235,7 @@ public JedisPool setupNodeIfNotExist(final HostAndPort node) {
238235
JedisPool existingPool = nodes.get(nodeKey);
239236
if (existingPool != null) return existingPool;
240237

241-
JedisPool nodePool = new JedisPool(poolConfig, node, socketConfig, infiniteSoTimeout, user, password, 0, clientName);
238+
JedisPool nodePool = new JedisPool(poolConfig, node, socketConfig, clientConfig);
242239
nodes.put(nodeKey, nodePool);
243240
return nodePool;
244241
} finally {

0 commit comments

Comments
 (0)