Skip to content

Commit 5c6ac25

Browse files
authored
Allow overriding timeouts of Apache HttpClient5 transport (#1617)
– Provided two new parameters (Connection/Response timeouts) for Apache HttpClient5 – Updated getting started page to show how to use it
1 parent ca0b78a commit 5c6ac25

File tree

4 files changed

+56
-9
lines changed

4 files changed

+56
-9
lines changed

docker-java-transport-httpclient5/src/main/java/com/github/dockerjava/httpclient5/ApacheDockerHttpClient.java

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.github.dockerjava.transport.SSLConfig;
44

55
import java.net.URI;
6+
import java.time.Duration;
67
import java.util.Objects;
78

89
public final class ApacheDockerHttpClient extends ApacheDockerHttpClientImpl {
@@ -15,6 +16,10 @@ public static final class Builder {
1516

1617
private int maxConnections = Integer.MAX_VALUE;
1718

19+
private Duration connectionTimeout;
20+
21+
private Duration responseTimeout;
22+
1823
public Builder dockerHost(URI value) {
1924
this.dockerHost = Objects.requireNonNull(value, "dockerHost");
2025
return this;
@@ -30,13 +35,24 @@ public Builder maxConnections(int value) {
3035
return this;
3136
}
3237

38+
public Builder connectionTimeout(Duration connectionTimeout) {
39+
this.connectionTimeout = connectionTimeout;
40+
return this;
41+
}
42+
43+
public Builder responseTimeout(Duration responseTimeout) {
44+
this.responseTimeout = responseTimeout;
45+
return this;
46+
}
47+
3348
public ApacheDockerHttpClient build() {
3449
Objects.requireNonNull(dockerHost, "dockerHost");
35-
return new ApacheDockerHttpClient(dockerHost, sslConfig, maxConnections);
50+
return new ApacheDockerHttpClient(dockerHost, sslConfig, maxConnections, connectionTimeout, responseTimeout);
3651
}
3752
}
3853

39-
private ApacheDockerHttpClient(URI dockerHost, SSLConfig sslConfig, int maxConnections) {
40-
super(dockerHost, sslConfig, maxConnections);
54+
private ApacheDockerHttpClient(URI dockerHost, SSLConfig sslConfig, int maxConnections, Duration connectionTimeout,
55+
Duration responseTimeout) {
56+
super(dockerHost, sslConfig, maxConnections, connectionTimeout, responseTimeout);
4157
}
4258
}

docker-java-transport-httpclient5/src/main/java/com/github/dockerjava/httpclient5/ApacheDockerHttpClientImpl.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.github.dockerjava.transport.NamedPipeSocket;
66
import com.github.dockerjava.transport.SSLConfig;
77
import org.apache.hc.client5.http.classic.methods.HttpUriRequestBase;
8+
import org.apache.hc.client5.http.config.RequestConfig;
89
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
910
import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
1011
import org.apache.hc.client5.http.impl.classic.HttpClients;
@@ -36,8 +37,10 @@
3637
import java.io.InputStream;
3738
import java.net.Socket;
3839
import java.net.URI;
40+
import java.time.Duration;
3941
import java.util.List;
4042
import java.util.Map;
43+
import java.util.concurrent.TimeUnit;
4144
import java.util.stream.Collectors;
4245
import java.util.stream.Stream;
4346

@@ -49,7 +52,9 @@ class ApacheDockerHttpClientImpl implements DockerHttpClient {
4952
protected ApacheDockerHttpClientImpl(
5053
URI dockerHost,
5154
SSLConfig sslConfig,
52-
int maxConnections
55+
int maxConnections,
56+
Duration connectionTimeout,
57+
Duration responseTimeout
5358
) {
5459
Registry<ConnectionSocketFactory> socketFactoryRegistry = createConnectionSocketFactoryRegistry(sslConfig, dockerHost);
5560

@@ -90,9 +95,18 @@ protected ApacheDockerHttpClientImpl(
9095
);
9196
connectionManager.setMaxTotal(maxConnections);
9297
connectionManager.setDefaultMaxPerRoute(maxConnections);
98+
RequestConfig.Builder defaultRequest = RequestConfig.custom();
99+
if (connectionTimeout != null) {
100+
defaultRequest.setConnectTimeout(connectionTimeout.toNanos(), TimeUnit.NANOSECONDS);
101+
}
102+
if (responseTimeout != null) {
103+
defaultRequest.setResponseTimeout(responseTimeout.toNanos(), TimeUnit.NANOSECONDS);
104+
}
105+
93106
httpClient = HttpClients.custom()
94107
.setRequestExecutor(new HijackingHttpRequestExecutor(null))
95108
.setConnectionManager(connectionManager)
109+
.setDefaultRequestConfig(defaultRequest.build())
96110
.disableConnectionState()
97111
.build();
98112
}

docker-java-transport-zerodep/src/main/java/com/github/dockerjava/httpclient5/ZerodepDockerHttpClient.java

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package com.github.dockerjava.httpclient5;
22

3-
import com.github.dockerjava.transport.SSLConfig;
4-
53
import java.net.URI;
4+
import java.time.Duration;
65
import java.util.Objects;
6+
import com.github.dockerjava.transport.SSLConfig;
77

88
@SuppressWarnings("unused")
99
public final class ZerodepDockerHttpClient extends ApacheDockerHttpClientImpl {
@@ -16,6 +16,10 @@ public static final class Builder {
1616

1717
private int maxConnections = Integer.MAX_VALUE;
1818

19+
private Duration connectionTimeout;
20+
21+
private Duration responseTimeout;
22+
1923
public Builder dockerHost(URI value) {
2024
this.dockerHost = Objects.requireNonNull(value, "dockerHost");
2125
return this;
@@ -31,13 +35,24 @@ public Builder maxConnections(int value) {
3135
return this;
3236
}
3337

38+
public Builder connectionTimeout(Duration connectionTimeout) {
39+
this.connectionTimeout = connectionTimeout;
40+
return this;
41+
}
42+
43+
public Builder responseTimeout(Duration responseTimeout) {
44+
this.responseTimeout = responseTimeout;
45+
return this;
46+
}
47+
3448
public ZerodepDockerHttpClient build() {
3549
Objects.requireNonNull(dockerHost, "dockerHost");
36-
return new ZerodepDockerHttpClient(dockerHost, sslConfig, maxConnections);
50+
return new ZerodepDockerHttpClient(dockerHost, sslConfig, maxConnections, connectionTimeout, responseTimeout);
3751
}
3852
}
3953

40-
protected ZerodepDockerHttpClient(URI dockerHost, SSLConfig sslConfig, int maxConnections) {
41-
super(dockerHost, sslConfig, maxConnections);
54+
private ZerodepDockerHttpClient(URI dockerHost, SSLConfig sslConfig, int maxConnections, Duration connectionTimeout,
55+
Duration responseTimeout) {
56+
super(dockerHost, sslConfig, maxConnections, connectionTimeout, responseTimeout);
4257
}
4358
}

docs/getting_started.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,8 @@ DockerHttpClient httpClient = new ApacheDockerHttpClient.Builder()
9191
.dockerHost(config.getDockerHost())
9292
.sslConfig(config.getSSLConfig())
9393
.maxConnections(100)
94+
.connectionTimeout(Duration.ofSeconds(30))
95+
.responseTimeout(Duration.ofSeconds(45))
9496
.build();
9597
```
9698

0 commit comments

Comments
 (0)