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
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
.project
.settings
.classpath
.factorypath

# Ignore all build/dist directories
target
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ public static final class Builder {

private SSLConfig sslConfig = null;

private ConnectionPoolConfig connectionPoolConf = null;

public Builder dockerHost(URI value) {
this.dockerHost = Objects.requireNonNull(value, "dockerHost");
return this;
Expand All @@ -23,13 +25,18 @@ public Builder sslConfig(SSLConfig value) {
return this;
}

public Builder connectionPool(ConnectionPoolConfig conf) {
this.connectionPoolConf = conf;
return this;
}

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

private ApacheDockerHttpClient(URI dockerHost, SSLConfig sslConfig) {
super(dockerHost, sslConfig);
private ApacheDockerHttpClient(URI dockerHost, SSLConfig sslConfig, ConnectionPoolConfig connectionPoolConfig) {
super(dockerHost, sslConfig, connectionPoolConfig);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,12 +41,12 @@
class ApacheDockerHttpClientImpl implements DockerHttpClient {

private final CloseableHttpClient httpClient;

private final HttpHost host;

protected ApacheDockerHttpClientImpl(
URI dockerHost,
SSLConfig sslConfig
SSLConfig sslConfig,
ConnectionPoolConfig connectionPoolConf
) {
Registry<ConnectionSocketFactory> socketFactoryRegistry = createConnectionSocketFactoryRegistry(sslConfig, dockerHost);

Expand All @@ -66,27 +66,35 @@ protected ApacheDockerHttpClientImpl(
host = HttpHost.create(dockerHost);
}

PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(
socketFactoryRegistry,
new ManagedHttpClientConnectionFactory(
null,
null,
null,
null,
message -> {
Header transferEncodingHeader = message.getFirstHeader(HttpHeaders.TRANSFER_ENCODING);
if (transferEncodingHeader != null) {
if ("identity".equalsIgnoreCase(transferEncodingHeader.getValue())) {
return ContentLengthStrategy.UNDEFINED;
}
}
return DefaultContentLengthStrategy.INSTANCE.determineLength(message);
},
null
)
);
if (connectionPoolConf != null) {
Integer maxConnections = connectionPoolConf.getMaxConnections();
if (maxConnections != null) {
connectionManager.setMaxTotal(maxConnections);
connectionManager.setDefaultMaxPerRoute(maxConnections);
}
}
httpClient = HttpClients.custom()
.setRequestExecutor(new HijackingHttpRequestExecutor(null))
.setConnectionManager(new PoolingHttpClientConnectionManager(
socketFactoryRegistry,
new ManagedHttpClientConnectionFactory(
null,
null,
null,
null,
message -> {
Header transferEncodingHeader = message.getFirstHeader(HttpHeaders.TRANSFER_ENCODING);
if (transferEncodingHeader != null) {
if ("identity".equalsIgnoreCase(transferEncodingHeader.getValue())) {
return ContentLengthStrategy.UNDEFINED;
}
}
return DefaultContentLengthStrategy.INSTANCE.determineLength(message);
},
null
)
))
.setConnectionManager(connectionManager)
.build();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.github.dockerjava.httpclient5;

public class ConnectionPoolConfig {

private Integer maxConnections;

public Integer getMaxConnections() {
return maxConnections;
}

public ConnectionPoolConfig setMaxConnections(Integer maxConnections) {
this.maxConnections = maxConnections;
return this;
}

@Override
public String toString() {
return "ConnectionPoolConfig [maxConnections=" + maxConnections + "]";
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package com.github.dockerjava.httpclient5;

import com.github.dockerjava.transport.SSLConfig;

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

import com.github.dockerjava.transport.SSLConfig;

@SuppressWarnings("unused")
public final class ZerodepDockerHttpClient extends ApacheDockerHttpClientImpl {

Expand All @@ -14,6 +14,8 @@ public static final class Builder {

private SSLConfig sslConfig = null;

private ConnectionPoolConfig connectionPoolConfig = null;

public Builder dockerHost(URI value) {
this.dockerHost = Objects.requireNonNull(value, "dockerHost");
return this;
Expand All @@ -24,13 +26,18 @@ public Builder sslConfig(SSLConfig value) {
return this;
}

public Builder connectionPool(ConnectionPoolConfig conf) {
this.connectionPoolConfig = conf;
return this;
}

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

protected ZerodepDockerHttpClient(URI dockerHost, SSLConfig sslConfig) {
super(dockerHost, sslConfig);
protected ZerodepDockerHttpClient(URI dockerHost, SSLConfig sslConfig, ConnectionPoolConfig connectionPoolConf) {
super(dockerHost, sslConfig, connectionPoolConf);
}
}