Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.github.dockerjava.transport.SSLConfig;

import java.net.URI;
import java.time.Duration;
import java.util.Objects;

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

private int maxConnections = Integer.MAX_VALUE;

private Duration connectionTimeout;

private Duration responseTimeout;

public Builder dockerHost(URI value) {
this.dockerHost = Objects.requireNonNull(value, "dockerHost");
return this;
Expand All @@ -30,13 +35,24 @@ public Builder maxConnections(int value) {
return this;
}

public Builder connectionTimeout(Duration connectionTimeout) {
this.connectionTimeout = connectionTimeout;
return this;
}

public Builder responseTimeout(Duration responseTimeout) {
this.responseTimeout = responseTimeout;
return this;
}

public ApacheDockerHttpClient build() {
Objects.requireNonNull(dockerHost, "dockerHost");
return new ApacheDockerHttpClient(dockerHost, sslConfig, maxConnections);
return new ApacheDockerHttpClient(dockerHost, sslConfig, maxConnections, connectionTimeout, responseTimeout);
}
}

private ApacheDockerHttpClient(URI dockerHost, SSLConfig sslConfig, int maxConnections) {
super(dockerHost, sslConfig, maxConnections);
private ApacheDockerHttpClient(URI dockerHost, SSLConfig sslConfig, int maxConnections, Duration connectionTimeout,
Duration responseTimeout) {
super(dockerHost, sslConfig, maxConnections, connectionTimeout, responseTimeout);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import com.github.dockerjava.transport.NamedPipeSocket;
import com.github.dockerjava.transport.SSLConfig;
import org.apache.hc.client5.http.classic.methods.HttpUriRequestBase;
import org.apache.hc.client5.http.config.RequestConfig;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
import org.apache.hc.client5.http.impl.classic.HttpClients;
Expand Down Expand Up @@ -36,8 +37,10 @@
import java.io.InputStream;
import java.net.Socket;
import java.net.URI;
import java.time.Duration;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import java.util.stream.Stream;

Expand All @@ -49,7 +52,9 @@ class ApacheDockerHttpClientImpl implements DockerHttpClient {
protected ApacheDockerHttpClientImpl(
URI dockerHost,
SSLConfig sslConfig,
int maxConnections
int maxConnections,
Duration connectionTimeout,
Duration responseTimeout
) {
Registry<ConnectionSocketFactory> socketFactoryRegistry = createConnectionSocketFactoryRegistry(sslConfig, dockerHost);

Expand Down Expand Up @@ -90,9 +95,18 @@ protected ApacheDockerHttpClientImpl(
);
connectionManager.setMaxTotal(maxConnections);
connectionManager.setDefaultMaxPerRoute(maxConnections);
RequestConfig.Builder defaultRequest = RequestConfig.custom();
if (connectionTimeout != null) {
defaultRequest.setConnectTimeout(connectionTimeout.toNanos(), TimeUnit.NANOSECONDS);
}
if (responseTimeout != null) {
defaultRequest.setResponseTimeout(responseTimeout.toNanos(), TimeUnit.NANOSECONDS);
}

httpClient = HttpClients.custom()
.setRequestExecutor(new HijackingHttpRequestExecutor(null))
.setConnectionManager(connectionManager)
.setDefaultRequestConfig(defaultRequest.build())
.disableConnectionState()
.build();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package com.github.dockerjava.httpclient5;

import com.github.dockerjava.transport.SSLConfig;

import java.net.URI;
import java.time.Duration;
import java.util.Objects;
import com.github.dockerjava.transport.SSLConfig;

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

private int maxConnections = Integer.MAX_VALUE;

private Duration connectionTimeout;

private Duration responseTimeout;

public Builder dockerHost(URI value) {
this.dockerHost = Objects.requireNonNull(value, "dockerHost");
return this;
Expand All @@ -31,13 +35,24 @@ public Builder maxConnections(int value) {
return this;
}

public Builder connectionTimeout(Duration connectionTimeout) {
this.connectionTimeout = connectionTimeout;
return this;
}

public Builder responseTimeout(Duration responseTimeout) {
this.responseTimeout = responseTimeout;
return this;
}

public ZerodepDockerHttpClient build() {
Objects.requireNonNull(dockerHost, "dockerHost");
return new ZerodepDockerHttpClient(dockerHost, sslConfig, maxConnections);
return new ZerodepDockerHttpClient(dockerHost, sslConfig, maxConnections, connectionTimeout, responseTimeout);
}
}

protected ZerodepDockerHttpClient(URI dockerHost, SSLConfig sslConfig, int maxConnections) {
super(dockerHost, sslConfig, maxConnections);
private ZerodepDockerHttpClient(URI dockerHost, SSLConfig sslConfig, int maxConnections, Duration connectionTimeout,
Duration responseTimeout) {
super(dockerHost, sslConfig, maxConnections, connectionTimeout, responseTimeout);
}
}
2 changes: 2 additions & 0 deletions docs/getting_started.md
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,8 @@ DockerHttpClient httpClient = new ApacheDockerHttpClient.Builder()
.dockerHost(config.getDockerHost())
.sslConfig(config.getSSLConfig())
.maxConnections(100)
.connectionTimeout(Duration.ofSeconds(30))
.responseTimeout(Duration.ofSeconds(45))
.build();
```

Expand Down