Adopt locally build docker client
- supports connection pool config See: https://github.com/docker-java/docker-java/pull/1474
This commit is contained in:
3
concourse/.vscode/settings.json
vendored
3
concourse/.vscode/settings.json
vendored
@@ -1,3 +1,4 @@
|
||||
{
|
||||
"python.linting.pylintEnabled": false
|
||||
"python.linting.pylintEnabled": false,
|
||||
"python.pythonPath": "/usr/bin/python"
|
||||
}
|
||||
@@ -1 +1,3 @@
|
||||
mvn clean package -Pe417 -Psnapshot
|
||||
export JAVA_HOME=/home/kdvolder/Applications/jdk-11.0.8+10
|
||||
mvn clean package -Pe417 -Psnapshot -Dsigning.skip=true -Dhttpclient.retry-max=20 -Dmaven.test.skip=true -Declipse.p2.mirrors=false -Dtycho.localArtifacts=ignore -Dorg.eclipse.equinox.p2.transport.ecf.retry=5 -Dskip.osx.signing=true -Dskip.win.signing=true -Dskip.osx.notarizing=true
|
||||
|
||||
|
||||
@@ -50,6 +50,7 @@ import org.springframework.ide.eclipse.boot.dash.api.Styleable;
|
||||
import org.springframework.ide.eclipse.boot.dash.console.LogType;
|
||||
import org.springframework.ide.eclipse.boot.dash.devtools.DevtoolsUtil;
|
||||
import org.springframework.ide.eclipse.boot.dash.docker.jmx.JmxSupport;
|
||||
import org.springframework.ide.eclipse.boot.dash.docker.util.Ownable;
|
||||
import org.springframework.ide.eclipse.boot.dash.model.RunState;
|
||||
import org.springframework.ide.eclipse.boot.dash.model.remote.RefreshStateTracker;
|
||||
import org.springframework.ide.eclipse.boot.util.RetryUtil;
|
||||
@@ -360,6 +361,8 @@ public class DockerContainer implements App, RunStateProvider, JmxConnectable, S
|
||||
.thenAnyChild()
|
||||
.thenValAt("name");
|
||||
|
||||
private static final boolean USE_DEDICATED_CLIENT = false;
|
||||
|
||||
private Supplier<Boolean> hasDevtoolsDep;
|
||||
|
||||
@Override
|
||||
@@ -454,10 +457,10 @@ public class DockerContainer implements App, RunStateProvider, JmxConnectable, S
|
||||
|
||||
private final CompletableFuture<Closeable> closeable = new CompletableFuture<Closeable>();
|
||||
|
||||
private DockerClient dedicatedClient;
|
||||
private Ownable<DockerClient> client;
|
||||
|
||||
public LogHandler(DockerClient dedicatedClient, AppConsole console) {
|
||||
this.dedicatedClient = dedicatedClient;
|
||||
public LogHandler(Ownable<DockerClient> client, AppConsole console) {
|
||||
this.client = client;
|
||||
consoleOut = console.getOutputStream(LogType.APP_OUT);
|
||||
consoleErr = console.getOutputStream(LogType.APP_OUT);
|
||||
Log.info("Creating log handler. Now active: "+activeLogHandlers.incrementAndGet());
|
||||
@@ -482,11 +485,12 @@ public class DockerContainer implements App, RunStateProvider, JmxConnectable, S
|
||||
} catch (IOException e) {
|
||||
}
|
||||
try {
|
||||
Log.info("Closing log handler. Now active: "+activeLogHandlers.decrementAndGet());
|
||||
dedicatedClient.close();
|
||||
if (client.isOwned) {
|
||||
client.ref.close();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
//ignore
|
||||
}
|
||||
Log.info("Closing log handler. Now active: "+activeLogHandlers.decrementAndGet());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -530,14 +534,16 @@ public class DockerContainer implements App, RunStateProvider, JmxConnectable, S
|
||||
}
|
||||
|
||||
public static LogConnection connectLog(DockerRunTarget target, String containerId, AppConsole console, boolean includeHistory) {
|
||||
DockerClient client = target.getDedicatedClientInstance();
|
||||
//Uses a dedicated client for log streaming because java docker client will eventually run out of connections in connection pool
|
||||
//Use a dedicated client for log streaming because java docker client will eventually run out of connections in connection pool
|
||||
//otherwise.
|
||||
//See:
|
||||
// - https://www.pivotaltracker.com/n/projects/1346850
|
||||
// - https://github.com/docker-java/docker-java/issues/1466
|
||||
Ownable<DockerClient> client = USE_DEDICATED_CLIENT
|
||||
? Ownable.owned(target.getDedicatedClientInstance())
|
||||
: Ownable.borrowed(target.getClient());
|
||||
if (client!=null) {
|
||||
LogContainerCmd cmd = client.logContainerCmd(containerId)
|
||||
LogContainerCmd cmd = client.ref.logContainerCmd(containerId)
|
||||
.withStdOut(true).withStdErr(true).withFollowStream(true);
|
||||
|
||||
if (!includeHistory) {
|
||||
|
||||
@@ -34,6 +34,7 @@ import com.github.dockerjava.api.DockerClient;
|
||||
import com.github.dockerjava.core.DefaultDockerClientConfig;
|
||||
import com.github.dockerjava.core.DockerClientImpl;
|
||||
import com.github.dockerjava.transport.DockerHttpClient;
|
||||
import com.github.dockerjava.zerodep.ConnectionPoolConfig;
|
||||
import com.github.dockerjava.zerodep.ZerodepDockerHttpClient;
|
||||
|
||||
public class DockerRunTargetType extends AbstractRemoteRunTargetType<DockerTargetParams> {
|
||||
@@ -84,6 +85,9 @@ public class DockerRunTargetType extends AbstractRemoteRunTargetType<DockerTarge
|
||||
DockerHttpClient httpClient = new ZerodepDockerHttpClient.Builder()
|
||||
.dockerHost(conf.getDockerHost())
|
||||
.sslConfig(conf.getSSLConfig())
|
||||
.connectionPool(new ConnectionPoolConfig()
|
||||
.setMaxConnections(200)
|
||||
)
|
||||
.build();
|
||||
return DockerClientImpl.getInstance(conf, httpClient);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
package org.springframework.ide.eclipse.boot.dash.docker.util;
|
||||
|
||||
/**
|
||||
* Represents a references that is either 'borrowed' or 'owned'.
|
||||
*/
|
||||
public class Ownable<T> {
|
||||
|
||||
public final T ref;
|
||||
public final boolean isOwned;
|
||||
|
||||
private Ownable(T ref, boolean owned) {
|
||||
this.ref = ref;
|
||||
this.isOwned = owned;
|
||||
}
|
||||
|
||||
public static <T> Ownable<T> owned(T x) {
|
||||
return x == null ? null : new Ownable<T>(x, true);
|
||||
}
|
||||
|
||||
public static <T> Ownable<T> borrowed(T x) {
|
||||
return x == null ? null : new Ownable<T>(x, false);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,22 +1,27 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry exported="true" kind="lib" path="dependency/docker-java-api-99.99.99-SNAPSHOT.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="dependency/docker-java-core-99.99.99-SNAPSHOT.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="dependency/docker-java-transport-99.99.99-SNAPSHOT.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="dependency/docker-java-transport-zerodep-99.99.99-SNAPSHOT.jar"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
|
||||
<attributes>
|
||||
<attribute name="module" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
|
||||
<classpathentry exported="true" kind="lib" path="dependency/bcpkix-jdk15on-1.64.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="dependency/bcprov-jdk15on-1.64.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="dependency/commons-compress-1.20.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="dependency/commons-io-2.6.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="dependency/commons-lang-2.6.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="dependency/docker-java-api-3.2.5.jar" sourcepath="/home/kdvolder/.m2/repository/com/github/docker-java/docker-java-api/3.2.5/docker-java-api-3.2.5-sources.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="dependency/docker-java-core-3.2.5.jar" sourcepath="/home/kdvolder/.m2/repository/com/github/docker-java/docker-java-core/3.2.5/docker-java-core-3.2.5-sources.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="dependency/docker-java-transport-3.2.5.jar" sourcepath="/home/kdvolder/.m2/repository/com/github/docker-java/docker-java-transport/3.2.5/docker-java-transport-3.2.5-sources.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="dependency/docker-java-transport-zerodep-3.2.5.jar" sourcepath="/home/kdvolder/.m2/repository/com/github/docker-java/docker-java-transport-zerodep/3.2.5/docker-java-transport-zerodep-3.2.5-sources.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="dependency/guava-19.0.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="dependency/jackson-annotations-2.11.2.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="dependency/jackson-core-2.11.2.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="dependency/jackson-databind-2.11.2.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="dependency/jna-5.5.0.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="dependency/slf4j-api-1.7.30.jar"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
|
||||
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry exported="true" kind="lib" path="dependency/slf4j-simple-1.7.30.jar"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
||||
|
||||
@@ -11,16 +11,16 @@ Bundle-ClassPath: .,
|
||||
dependency/commons-compress-1.20.jar,
|
||||
dependency/commons-io-2.6.jar,
|
||||
dependency/commons-lang-2.6.jar,
|
||||
dependency/docker-java-api-3.2.5.jar,
|
||||
dependency/docker-java-core-3.2.5.jar,
|
||||
dependency/docker-java-transport-3.2.5.jar,
|
||||
dependency/docker-java-transport-zerodep-3.2.5.jar,
|
||||
dependency/guava-19.0.jar,
|
||||
dependency/jackson-annotations-2.11.2.jar,
|
||||
dependency/jackson-core-2.11.2.jar,
|
||||
dependency/jackson-databind-2.11.2.jar,
|
||||
dependency/jna-5.5.0.jar,
|
||||
dependency/slf4j-api-1.7.30.jar
|
||||
dependency/slf4j-api-1.7.30.jar,
|
||||
dependency/slf4j-simple-1.7.30.jar,
|
||||
dependency/docker-java-api-99.99.99-SNAPSHOT.jar,
|
||||
dependency/docker-java-core-99.99.99-SNAPSHOT.jar,
|
||||
dependency/docker-java-transport-99.99.99-SNAPSHOT.jar,
|
||||
dependency/docker-java-transport-zerodep-99.99.99-SNAPSHOT.jar
|
||||
Export-Package: com.github.dockerjava.api,
|
||||
com.github.dockerjava.api.async,
|
||||
com.github.dockerjava.api.command,
|
||||
@@ -97,3 +97,4 @@ Export-Package: com.github.dockerjava.api,
|
||||
com.github.dockerjava.zerodep.shaded.org.apache.hc.core5.reactor.ssl,
|
||||
com.github.dockerjava.zerodep.shaded.org.apache.hc.core5.ssl,
|
||||
com.github.dockerjava.zerodep.shaded.org.apache.hc.core5.util
|
||||
Require-Bundle: com.google.guava
|
||||
|
||||
@@ -8,13 +8,13 @@ bin.includes = META-INF/,\
|
||||
dependency/commons-compress-1.20.jar,\
|
||||
dependency/commons-io-2.6.jar,\
|
||||
dependency/commons-lang-2.6.jar,\
|
||||
dependency/docker-java-api-3.2.5.jar,\
|
||||
dependency/docker-java-core-3.2.5.jar,\
|
||||
dependency/docker-java-transport-3.2.5.jar,\
|
||||
dependency/docker-java-transport-zerodep-3.2.5.jar,\
|
||||
dependency/guava-19.0.jar,\
|
||||
dependency/jackson-annotations-2.11.2.jar,\
|
||||
dependency/jackson-core-2.11.2.jar,\
|
||||
dependency/jackson-databind-2.11.2.jar,\
|
||||
dependency/jna-5.5.0.jar,\
|
||||
dependency/slf4j-api-1.7.30.jar
|
||||
dependency/slf4j-api-1.7.30.jar,\
|
||||
dependency/docker-java-api-99.99.99-SNAPSHOT.jar,\
|
||||
dependency/docker-java-core-99.99.99-SNAPSHOT.jar,\
|
||||
dependency/docker-java-transport-99.99.99-SNAPSHOT.jar,\
|
||||
dependency/docker-java-transport-zerodep-99.99.99-SNAPSHOT.jar
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -22,12 +22,17 @@
|
||||
<dependency>
|
||||
<groupId>com.github.docker-java</groupId>
|
||||
<artifactId>docker-java-core</artifactId>
|
||||
<version>3.2.5</version>
|
||||
<version>3.2.6-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.github.docker-java</groupId>
|
||||
<artifactId>docker-java-transport-zerodep</artifactId>
|
||||
<version>3.2.5</version>
|
||||
<version>3.2.6-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-simple</artifactId>
|
||||
<version>1.7.30</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@ import com.github.dockerjava.api.model.Image;
|
||||
import com.github.dockerjava.core.DefaultDockerClientConfig;
|
||||
import com.github.dockerjava.core.DockerClientImpl;
|
||||
import com.github.dockerjava.transport.DockerHttpClient;
|
||||
import com.github.dockerjava.zerodep.ConnectionPoolConfig;
|
||||
import com.github.dockerjava.zerodep.ZerodepDockerHttpClient;
|
||||
|
||||
public class DockerClientWrapperApplication {
|
||||
@@ -26,6 +27,13 @@ public class DockerClientWrapperApplication {
|
||||
for (Image image : imgs) {
|
||||
System.out.println(image.getId());
|
||||
}
|
||||
|
||||
if (httpClient instanceof ConnectionPoolConfig) {
|
||||
ConnectionPoolConfig cp = (ConnectionPoolConfig) httpClient;
|
||||
System.out.println("max = " +cp.getPoolSizeMax());
|
||||
System.out.println("max per route = "+cp.getPoolSizeDefaultMaxPerRoute());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Alternate Docker Client
|
||||
com.github.dockerjavaAlternate Docker Client
|
||||
=====================
|
||||
|
||||
Repackaged as a single osgi bundle with all its dependencies.
|
||||
@@ -13,7 +13,7 @@ Packaging Process:
|
||||
- Build the maven project `docker-client-wrapper` which is included as a sub-folder in this project.
|
||||
- copy all the jars from `docker-client-wrapper/target/dependency` to `dependency`.
|
||||
- Open `manifest.mf` with PDE tabbed editor. Select the 'Runtime' tab and then:
|
||||
- clear out exported packages section then add all com.spotify.docker.client* packages back
|
||||
- clear out exported packages section then add all `com.github.dockerjava*` packages back
|
||||
- clear our 'classpath' section and all jars in the 'dependency folder.
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
# SLF4J's SimpleLogger configuration file
|
||||
# Simple implementation of Logger that sends all enabled log messages, for all defined loggers, to System.err.
|
||||
|
||||
# Default logging detail level for all instances of SimpleLogger.
|
||||
# Must be one of ("trace", "debug", "info", "warn", or "error").
|
||||
# If not specified, defaults to "info".
|
||||
#org.slf4j.simpleLogger.defaultLogLevel=debug
|
||||
|
||||
# Logging detail level for a SimpleLogger instance named "xxxxx".
|
||||
# Must be one of ("trace", "debug", "info", "warn", or "error").
|
||||
# If not specified, the default logging detail level is used.
|
||||
#org.slf4j.simpleLogger.log.xxxxx=
|
||||
|
||||
# Set to true if you want the current date and time to be included in output messages.
|
||||
# Default is false, and will output the number of milliseconds elapsed since startup.
|
||||
#org.slf4j.simpleLogger.showDateTime=false
|
||||
|
||||
# The date and time format to be used in the output messages.
|
||||
# The pattern describing the date and time format is the same that is used in java.text.SimpleDateFormat.
|
||||
# If the format is not specified or is invalid, the default format is used.
|
||||
# The default format is yyyy-MM-dd HH:mm:ss:SSS Z.
|
||||
#org.slf4j.simpleLogger.dateTimeFormat=yyyy-MM-dd HH:mm:ss:SSS Z
|
||||
|
||||
#org.slf4j.simpleLogger.logFile=/tmp/sts-docker-client.log
|
||||
#org.slf4j.simpleLogger.log.com.github.dockerjava.zerodep.shaded.org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager=debug
|
||||
@@ -0,0 +1,15 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
version_override=99.99.99-SNAPSHOT
|
||||
export JAVA_HOME=/home/kdvolder/Applications/jdk1.8.0_271
|
||||
cd ~/git/kdvolder/docker-java
|
||||
./mvnw versions:set -DnewVersion=${version_override}
|
||||
./mvnw clean package -Dmaven.test.skip=true
|
||||
for f in \
|
||||
docker-java-transport/target/docker-java-transport-${version_override}.jar \
|
||||
docker-java-transport-zerodep/target/docker-java-transport-zerodep-${version_override}.jar \
|
||||
docker-java-core/target/docker-java-core-${version_override}.jar \
|
||||
docker-java-api/target/docker-java-api-${version_override}.jar
|
||||
do
|
||||
cp $f ~/git/sts4/eclipse-extensions/org.springframework.ide.eclipse.docker.client/dependency/
|
||||
done
|
||||
8
local-build.sh
Executable file
8
local-build.sh
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/bin/bash
|
||||
#export JAVA_HOME=/home/kdvolder/Applications/jdk-11.0.8+10
|
||||
set -e
|
||||
workdir=$(pwd)
|
||||
cd $workdir/eclipse-language-servers
|
||||
./local-build.sh
|
||||
cd $workdir/eclipse-distribution
|
||||
./local-build.sh
|
||||
Reference in New Issue
Block a user