Skip to content

Commit 8b92bd5

Browse files
committed
expand jedis socket config
1 parent 9f6afe6 commit 8b92bd5

21 files changed

+185
-127
lines changed

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,11 @@ public BinaryJedis(final String host, final int port, final int connectionTimeou
137137
client.setInfiniteSoTimeout(infiniteSoTimeout);
138138
}
139139

140+
public BinaryJedis(final HostAndPort hostAndPort, final JedisSocketConfig config, final int infiniteSoTimeout) {
141+
this(hostAndPort, config);
142+
client.setInfiniteSoTimeout(infiniteSoTimeout);
143+
}
144+
140145
public BinaryJedis(final JedisShardInfo shardInfo) {
141146
this(shardInfo.getHost(), shardInfo.getPort(), shardInfo.getConnectionTimeout(),
142147
shardInfo.getSoTimeout(), shardInfo.getSsl(), shardInfo.getSslSocketFactory(),

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

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,21 +84,23 @@ public BinaryJedisCluster(Set<HostAndPort> jedisClusterNode, int connectionTimeo
8484
this(jedisClusterNode, connectionTimeout, soTimeout, maxAttempts, user, password, clientName, poolConfig, ssl, null, null, null, null);
8585
}
8686

87+
@Deprecated
8788
public BinaryJedisCluster(Set<HostAndPort> jedisClusterNode, int connectionTimeout, int soTimeout, int maxAttempts, String password, String clientName, GenericObjectPoolConfig poolConfig,
8889
boolean ssl, SSLSocketFactory sslSocketFactory, SSLParameters sslParameters, HostnameVerifier hostnameVerifier, JedisClusterHostAndPortMap hostAndPortMap) {
8990
this(jedisClusterNode, connectionTimeout, soTimeout, maxAttempts, null, password, clientName,
9091
poolConfig, ssl, sslSocketFactory, sslParameters, hostnameVerifier, hostAndPortMap);
9192
}
9293

94+
@Deprecated
9395
public BinaryJedisCluster(Set<HostAndPort> jedisClusterNode, int connectionTimeout, int soTimeout,
9496
int maxAttempts, String user, String password, String clientName, GenericObjectPoolConfig poolConfig,
9597
boolean ssl, SSLSocketFactory sslSocketFactory, SSLParameters sslParameters,
9698
HostnameVerifier hostnameVerifier, JedisClusterHostAndPortMap hostAndPortMap) {
97-
this.connectionHandler = new JedisSlotBasedConnectionHandler(jedisClusterNode, poolConfig,
98-
connectionTimeout, soTimeout, user, password, clientName, ssl, sslSocketFactory, sslParameters, hostnameVerifier, hostAndPortMap);
99-
this.maxAttempts = maxAttempts;
99+
this(jedisClusterNode, connectionTimeout, soTimeout, 0, maxAttempts, user, password, clientName, poolConfig,
100+
ssl, sslSocketFactory, sslParameters, hostnameVerifier, hostAndPortMap);
100101
}
101102

103+
@Deprecated
102104
public BinaryJedisCluster(Set<HostAndPort> jedisClusterNode, int connectionTimeout, int soTimeout,
103105
int infiniteSoTimeout, int maxAttempts, String user, String password, String clientName, GenericObjectPoolConfig poolConfig,
104106
boolean ssl, SSLSocketFactory sslSocketFactory, SSLParameters sslParameters, HostnameVerifier hostnameVerifier, JedisClusterHostAndPortMap hostAndPortMap) {
@@ -107,6 +109,14 @@ public BinaryJedisCluster(Set<HostAndPort> jedisClusterNode, int connectionTimeo
107109
this.maxAttempts = maxAttempts;
108110
}
109111

112+
public BinaryJedisCluster(Set<HostAndPort> jedisClusterNode, JedisSocketConfig socketConfig,
113+
int infiniteSoTimeout, int maxAttempts, String user, String password, String clientName,
114+
GenericObjectPoolConfig poolConfig) {
115+
this.connectionHandler = new JedisSlotBasedConnectionHandler(jedisClusterNode, poolConfig,
116+
socketConfig, infiniteSoTimeout, user, password, clientName);
117+
this.maxAttempts = maxAttempts;
118+
}
119+
110120
@Override
111121
public void close() {
112122
if (connectionHandler != null) {

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

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public Connection(final String host) {
3939
}
4040

4141
public Connection(final String host, final int port) {
42-
this(host, port, null);
42+
this(host, port, DefaultJedisSocketConfig.DEFAULT_SOCKET_CONFIG);
4343
}
4444

4545
@Deprecated
@@ -57,7 +57,11 @@ public Connection(final String host, final int port, final boolean ssl,
5757
}
5858

5959
public Connection(final String host, final int port, final JedisSocketConfig jedisSocketConfig) {
60-
this(new DefaultJedisSocketFactory(host, port, jedisSocketConfig));
60+
this(new HostAndPort(host, port), jedisSocketConfig);
61+
}
62+
63+
public Connection(final HostAndPort hostAndPort, final JedisSocketConfig jedisSocketConfig) {
64+
this(new DefaultJedisSocketFactory(hostAndPort, jedisSocketConfig));
6165
}
6266

6367
public Connection(final JedisSocketFactory jedisSocketFactory) {
@@ -177,10 +181,14 @@ public void connect() {
177181
inputStream = new RedisInputStream(socket.getInputStream());
178182
} catch (IOException ioe) {
179183
broken = true;
180-
throw new JedisConnectionException("Failed connecting to " + socketFactory.getDescription(), ioe);
184+
throw new JedisConnectionException("Failed to create input/output stream", ioe);
181185
} catch (JedisConnectionException jce) {
182186
broken = true;
183187
throw jce;
188+
} finally {
189+
if (broken) {
190+
IOUtils.closeQuietly(socket);
191+
}
184192
}
185193
}
186194
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66

77
public class DefaultJedisSocketConfig implements JedisSocketConfig {
88

9+
public static final DefaultJedisSocketConfig DEFAULT_SOCKET_CONFIG = DefaultJedisSocketConfig.builder().build();
10+
911
private final int connectionTimeout;
1012
private final int soTimeout;
1113

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

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,14 @@
1313

1414
public class DefaultJedisSocketFactory implements JedisSocketFactory {
1515

16-
private final String host;
17-
private final int port;
16+
private final HostAndPort hostPort;
1817
private final JedisSocketConfig config;
1918

2019
@Deprecated
2120
public DefaultJedisSocketFactory(String host, int port, int connectionTimeout, int soTimeout,
2221
boolean ssl, SSLSocketFactory sslSocketFactory, SSLParameters sslParameters,
2322
HostnameVerifier hostnameVerifier) {
24-
this(host, port,
23+
this(new HostAndPort(host, port),
2524
DefaultJedisSocketConfig.builder()
2625
.withConnectionTimeout(connectionTimeout)
2726
.withSoTimeout(soTimeout)
@@ -33,10 +32,9 @@ public DefaultJedisSocketFactory(String host, int port, int connectionTimeout, i
3332
);
3433
}
3534

36-
public DefaultJedisSocketFactory(String host, int port, JedisSocketConfig socketConfig) {
37-
this.host = host;
38-
this.port = port;
39-
this.config = socketConfig != null ? socketConfig : DefaultJedisSocketConfig.builder().build();
35+
public DefaultJedisSocketFactory(HostAndPort hostAndPort, JedisSocketConfig socketConfig) {
36+
this.hostPort = hostAndPort;
37+
this.config = socketConfig != null ? socketConfig : DefaultJedisSocketConfig.DEFAULT_SOCKET_CONFIG;
4038
}
4139

4240
@Override
@@ -51,15 +49,16 @@ public Socket createSocket() throws JedisConnectionException {
5149
socket.setSoLinger(true, 0); // Control calls close () method, the underlying socket is closed immediately
5250
// <-@wjw_add
5351

54-
socket.connect(new InetSocketAddress(getHost(), getPort()), getConnectionTimeout());
52+
HostAndPort hostAndPort = getSocketHostAndPort();
53+
socket.connect(new InetSocketAddress(hostAndPort.getHost(), hostAndPort.getPort()), getConnectionTimeout());
5554
socket.setSoTimeout(getSoTimeout());
5655

5756
if (config.isSSL()) {
5857
SSLSocketFactory sslSocketFactory = config.getSSLSocketFactory();
5958
if (null == sslSocketFactory) {
6059
sslSocketFactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
6160
}
62-
socket = sslSocketFactory.createSocket(socket, getHost(), getPort(), true);
61+
socket = sslSocketFactory.createSocket(socket, hostAndPort.getHost(), hostAndPort.getPort(), true);
6362

6463
SSLParameters sslParameters = config.getSSLParameters();
6564
if (null != sslParameters) {
@@ -85,14 +84,28 @@ public Socket createSocket() throws JedisConnectionException {
8584
}
8685
}
8786

87+
public HostAndPort getHostAndPort() {
88+
return this.hostPort;
89+
}
90+
91+
public HostAndPort getSocketHostAndPort() {
92+
HostAndPortMapper mapper = config.getHostAndPortMapper();
93+
HostAndPort hostAndPort = getHostAndPort();
94+
if (mapper != null) {
95+
HostAndPort mapped = mapper.getHostAndPort(hostAndPort);
96+
if (mapped != null) return mapped;
97+
}
98+
return hostAndPort;
99+
}
100+
88101
@Override
89102
public String getDescription() {
90-
return host + ":" + port;
103+
return this.hostPort.toString();
91104
}
92105

93106
@Override
94107
public String getHost() {
95-
return host;
108+
return this.hostPort.getHost();
96109
}
97110

98111
@Override
@@ -102,7 +115,7 @@ public void setHost(String host) {
102115

103116
@Override
104117
public int getPort() {
105-
return port;
118+
return this.hostPort.getPort();
106119
}
107120

108121
@Override

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,5 @@
22

33
public interface HostAndPortMapper {
44

5-
HostAndPort getHostAndPort(String host, int port);
6-
75
HostAndPort getHostAndPort(HostAndPort hap);
86
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,6 @@ public Jedis(final String host, final int port) {
5757
super(host, port);
5858
}
5959

60-
public Jedis(final String host, final int port, final JedisSocketConfig config) {
61-
super(host, port, config);
62-
}
63-
6460
public Jedis(final String host, final int port, final boolean ssl) {
6561
super(host, port, ssl);
6662
}
@@ -94,6 +90,10 @@ public Jedis(final String host, final int port, final int connectionTimeout, fin
9490
super(host, port, connectionTimeout, soTimeout, infiniteSoTimeout);
9591
}
9692

93+
public Jedis(final HostAndPort hostAndPort, final JedisSocketConfig config, final int infiniteSoTimeout) {
94+
super(hostAndPort, config, infiniteSoTimeout);
95+
}
96+
9797
public Jedis(final String host, final int port, final int connectionTimeout, final int soTimeout,
9898
final boolean ssl) {
9999
super(host, port, connectionTimeout, soTimeout, ssl);

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,12 @@ public JedisCluster(Set<HostAndPort> jedisClusterNode, int connectionTimeout, in
193193
clientName, poolConfig, ssl, sslSocketFactory, sslParameters, hostnameVerifier, hostAndPortMap);
194194
}
195195

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);
200+
}
201+
196202
@Override
197203
public String set(final String key, final String value) {
198204
return new JedisClusterCommand<String>(connectionHandler, maxAttempts) {

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

Lines changed: 37 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@ 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+
3742
@Deprecated
3843
public JedisClusterConnectionHandler(Set<HostAndPort> nodes, GenericObjectPoolConfig poolConfig,
3944
int connectionTimeout, int soTimeout, String password, String clientName,
@@ -69,18 +74,40 @@ public JedisClusterConnectionHandler(Set<HostAndPort> nodes, final GenericObject
6974
int connectionTimeout, int soTimeout, int infiniteSoTimeout, String user, String password, String clientName,
7075
boolean ssl, SSLSocketFactory sslSocketFactory, SSLParameters sslParameters,
7176
HostnameVerifier hostnameVerifier, JedisClusterHostAndPortMap portMap) {
72-
this(nodes, poolConfig, connectionTimeout, soTimeout, infiniteSoTimeout, user, password,
73-
clientName, ssl, sslSocketFactory, sslParameters, hostnameVerifier, (HostAndPortMapper) portMap);
77+
this(nodes,
78+
DefaultJedisSocketConfig.builder().withConnectionTimeout(connectionTimeout).withSoTimeout(soTimeout)
79+
.withSsl(ssl).withSslSocketFactory(sslSocketFactory).withSslParameters(sslParameters)
80+
.withHostnameVerifier(hostnameVerifier).build(),
81+
poolConfig,
82+
DefaultJedisSocketConfig.builder().withConnectionTimeout(connectionTimeout).withSoTimeout(soTimeout)
83+
.withSsl(ssl).withSslSocketFactory(sslSocketFactory).withSslParameters(sslParameters)
84+
.withHostnameVerifier(hostnameVerifier).withHostAndPortMapper(portMap).build(),
85+
infiniteSoTimeout, user, password, clientName);
7486
}
7587

7688
public JedisClusterConnectionHandler(Set<HostAndPort> nodes, final GenericObjectPoolConfig poolConfig,
7789
int connectionTimeout, int soTimeout, int infiniteSoTimeout, String user, String password, String clientName,
7890
boolean ssl, SSLSocketFactory sslSocketFactory, SSLParameters sslParameters,
7991
HostnameVerifier hostnameVerifier, HostAndPortMapper portMap) {
80-
this.cache = new JedisClusterInfoCache(poolConfig, connectionTimeout, soTimeout, infiniteSoTimeout,
81-
user, password, clientName, ssl, sslSocketFactory, sslParameters, hostnameVerifier, portMap);
82-
initializeSlotsCache(nodes, connectionTimeout, soTimeout, infiniteSoTimeout,
83-
user, password, clientName, ssl, sslSocketFactory, sslParameters, hostnameVerifier);
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+
99+
@Deprecated
100+
public JedisClusterConnectionHandler(Set<HostAndPort> nodes, final JedisSocketConfig seedNodesSocketConfig,
101+
final GenericObjectPoolConfig poolConfig, final JedisSocketConfig clusterNodesSocketConfig,
102+
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);
105+
}
106+
107+
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);
84111
}
85112

86113
abstract Jedis getConnection();
@@ -95,14 +122,11 @@ public Map<String, JedisPool> getNodes() {
95122
return cache.getNodes();
96123
}
97124

98-
private void initializeSlotsCache(Set<HostAndPort> startNodes,
99-
int connectionTimeout, int soTimeout, int infiniteSoTimeout, String user, String password, String clientName,
100-
boolean ssl, SSLSocketFactory sslSocketFactory, SSLParameters sslParameters, HostnameVerifier hostnameVerifier) {
101-
for (HostAndPort hostAndPort : startNodes) {
102-
103-
try (Jedis jedis = new Jedis(hostAndPort.getHost(), hostAndPort.getPort(), connectionTimeout,
104-
soTimeout, infiniteSoTimeout, ssl, sslSocketFactory, sslParameters, hostnameVerifier)) {
125+
private void initializeSlotsCache(Set<HostAndPort> startNodes, final JedisSocketConfig socketConfig,
126+
int infiniteSoTimeout, String user, String password, String clientName) {
105127

128+
for (HostAndPort hostAndPort : startNodes) {
129+
try (Jedis jedis = new Jedis(hostAndPort, socketConfig, infiniteSoTimeout)) {
106130
if (user != null) {
107131
jedis.auth(user, password);
108132
} else if (password != null) {

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

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,13 @@
33
/**
44
* @deprecated Use HostAndPortMapper
55
*/
6+
@Deprecated
67
public interface JedisClusterHostAndPortMap extends HostAndPortMapper {
78

89
HostAndPort getSSLHostAndPort(String host, int port);
910

10-
@Override
11-
default HostAndPort getHostAndPort(String host, int port) {
12-
return getSSLHostAndPort(host, port);
13-
}
14-
1511
@Override
1612
default HostAndPort getHostAndPort(HostAndPort hap) {
17-
return getHostAndPort(hap.getHost(), hap.getPort());
13+
return getSSLHostAndPort(hap.getHost(), hap.getPort());
1814
}
1915
}

0 commit comments

Comments
 (0)