Skip to content

Commit ff63270

Browse files
committed
Merge pull request #285 from disaacson/tcptimeouts
Allow clients to specify TCP timeouts
2 parents 239ce45 + 309304b commit ff63270

File tree

1 file changed

+32
-20
lines changed

1 file changed

+32
-20
lines changed

java/client/src/org/openqa/selenium/remote/internal/HttpClientFactory.java

Lines changed: 32 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,17 @@
5050
public class HttpClientFactory {
5151

5252
private final CloseableHttpClient httpClient;
53-
private final int TIMEOUT_THREE_HOURS = (int) SECONDS.toMillis(60 * 60 * 3);
53+
private static final int TIMEOUT_THREE_HOURS = (int) SECONDS.toMillis(60 * 60 * 3);
54+
private static final int TIMEOUT_TWO_MINUTES = (int) SECONDS.toMillis(60 * 2);
5455
private final HttpClientConnectionManager gridClientConnectionManager =
5556
getClientConnectionManager();
5657

5758
public HttpClientFactory() {
58-
httpClient = createHttpClient(null);
59+
this(TIMEOUT_TWO_MINUTES, TIMEOUT_THREE_HOURS);
60+
}
61+
62+
public HttpClientFactory(int connectionTimeout, int socketTimeout) {
63+
httpClient = createHttpClient(null, connectionTimeout, socketTimeout);
5964
}
6065

6166
private static HttpClientConnectionManager getClientConnectionManager() {
@@ -77,12 +82,25 @@ public HttpClient getHttpClient() {
7782
}
7883

7984
public CloseableHttpClient createHttpClient(Credentials credentials) {
85+
return createHttpClient(credentials, TIMEOUT_TWO_MINUTES, TIMEOUT_THREE_HOURS);
86+
}
87+
88+
public CloseableHttpClient createHttpClient(Credentials credentials, int connectionTimeout, int socketTimeout) {
89+
if (connectionTimeout <= 0) {
90+
throw new IllegalArgumentException("connection timeout must be > 0");
91+
}
92+
if (socketTimeout <= 0) {
93+
throw new IllegalArgumentException("socket timeout must be > 0");
94+
}
95+
96+
SocketConfig socketConfig = createSocketConfig(socketTimeout);
97+
RequestConfig requestConfig = createRequestConfig(connectionTimeout, socketTimeout);
98+
8099
HttpClientBuilder builder = HttpClientBuilder.create()
81100
.setConnectionManager(getClientConnectionManager())
82-
.setDefaultSocketConfig(createSocketConfig())
83-
.setDefaultSocketConfig(createSocketConfig())
84-
.setRoutePlanner(createRoutePlanner())
85-
.setDefaultRequestConfig(createRequestConfig());
101+
.setDefaultSocketConfig(createSocketConfig(socketTimeout))
102+
.setDefaultRequestConfig(createRequestConfig(connectionTimeout, socketTimeout))
103+
.setRoutePlanner(createRoutePlanner());
86104

87105
if (credentials != null) {
88106
CredentialsProvider provider = new BasicCredentialsProvider();
@@ -93,17 +111,11 @@ public CloseableHttpClient createHttpClient(Credentials credentials) {
93111
return builder.build();
94112
}
95113

96-
public HttpClient getGridHttpClient(int connection_timeout, int socket_timeout) {
114+
public HttpClient getGridHttpClient(int connectionTimeout, int socketTimeout) {
97115
gridClientConnectionManager.closeIdleConnections(100, MILLISECONDS);
98116

99-
SocketConfig socketConfig = SocketConfig.copy(createSocketConfig())
100-
.setSoTimeout(socket_timeout > 0 ? socket_timeout : TIMEOUT_THREE_HOURS)
101-
.build();
102-
103-
RequestConfig requestConfig = RequestConfig.copy(createRequestConfig())
104-
.setConnectTimeout(connection_timeout > 0 ? connection_timeout : 120 * 1000)
105-
.setSocketTimeout(socket_timeout > 0 ? socket_timeout : TIMEOUT_THREE_HOURS)
106-
.build();
117+
SocketConfig socketConfig = createSocketConfig(socketTimeout);
118+
RequestConfig requestConfig = createRequestConfig(connectionTimeout, socketTimeout);
107119

108120
return HttpClientBuilder.create()
109121
.setConnectionManager(gridClientConnectionManager)
@@ -114,18 +126,18 @@ public HttpClient getGridHttpClient(int connection_timeout, int socket_timeout)
114126
.build();
115127
}
116128

117-
private SocketConfig createSocketConfig() {
129+
private SocketConfig createSocketConfig(int socketTimeout) {
118130
return SocketConfig.custom()
119131
.setSoReuseAddress(true)
120-
.setSoTimeout(TIMEOUT_THREE_HOURS)
132+
.setSoTimeout(socketTimeout)
121133
.build();
122134
}
123135

124-
private RequestConfig createRequestConfig() {
136+
private RequestConfig createRequestConfig(int connectionTimeout, int socketTimeout) {
125137
return RequestConfig.custom()
126138
.setStaleConnectionCheckEnabled(true)
127-
.setConnectTimeout(120 * 1000)
128-
.setSocketTimeout(TIMEOUT_THREE_HOURS)
139+
.setConnectTimeout(connectionTimeout)
140+
.setSocketTimeout(socketTimeout)
129141
.build();
130142
}
131143

0 commit comments

Comments
 (0)