Skip to content

Commit

Permalink
Merge pull request #175 from testcontainers/#170-fix-resource-leak
Browse files Browse the repository at this point in the history
Shade io.netty dependencies into Testcontainers JAR
Improve cleanup of docker clients
  • Loading branch information
rnorth committed Jul 16, 2016
2 parents 362b1ec + 6f41fc5 commit a3c0fee
Show file tree
Hide file tree
Showing 6 changed files with 57 additions and 6 deletions.
5 changes: 5 additions & 0 deletions core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,10 @@
<pattern>jersey.repackaged</pattern>
<shadedPattern>org.testcontainers.shaded.jersey.repackaged</shadedPattern>
</relocation>
<relocation>
<pattern>io.netty</pattern>
<shadedPattern>org.testcontainers.shaded.io.netty</shadedPattern>
</relocation>
</relocations>
<artifactSet>
<includes>
Expand All @@ -158,6 +162,7 @@
<include>javax.ws.rs:*</include>
<include>com.fasterxml.*:*</include>
<include>com.github.docker-java:*</include>
<include>io.netty:*</include>
</includes>
</artifactSet>
<promoteTransitiveDependencies>true</promoteTransitiveDependencies>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,12 @@ public void stop() {
}

ResourceReaper.instance().stopAndRemoveContainer(containerId, imageName);

try {
dockerClient.close();
} catch (IOException e) {
logger().debug("Failed to close docker client");
}
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
import com.github.dockerjava.netty.DockerCmdExecFactoryImpl;
import com.google.common.base.Throwables;
import org.jetbrains.annotations.Nullable;
import org.rnorth.ducttape.ratelimits.RateLimiter;
import org.rnorth.ducttape.ratelimits.RateLimiterBuilder;
import org.rnorth.ducttape.unreliables.Unreliables;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand All @@ -21,6 +23,11 @@ public abstract class DockerClientProviderStrategy {

protected DockerClientConfig config;

private static final RateLimiter PING_RATE_LIMITER = RateLimiterBuilder.newBuilder()
.withRate(2, TimeUnit.SECONDS)
.withConstantThroughput()
.build();

/**
* @throws InvalidConfigurationException if this strategy fails
*/
Expand Down Expand Up @@ -98,8 +105,11 @@ protected DockerClient getClientForConfig(DockerClientConfig config) {

protected void ping(DockerClient client, int timeoutInSeconds) {
Unreliables.retryUntilSuccess(timeoutInSeconds, TimeUnit.SECONDS, () -> {
client.pingCmd().exec();
return true;
return PING_RATE_LIMITER.getWhenReady(() -> {
LOGGER.debug("Pinging docker daemon...");
client.pingCmd().exec();
return true;
});
});
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@
<logger name="org.rnorth.tcpunixsocketproxy" level="INFO" />
<logger name="io.netty" level="WARN" />
<logger name="org.mongodb" level="INFO" />
<logger name="org.testcontainers.shaded.org.apache.http" level="WARN"/>
<logger name="org.testcontainers.shaded.com.github.dockerjava" level="WARN"/>
<logger name="org.testcontainers" level="INFO"/>
<logger name="org.testcontainers.shaded" level="WARN"/>
<logger name="com.zaxxer.hikari" level="INFO"/>

<turboFilter class="ch.qos.logback.classic.turbo.MarkerFilter">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@
<logger name="org.rnorth.tcpunixsocketproxy" level="INFO" />
<logger name="io.netty" level="WARN" />
<logger name="org.mongodb" level="INFO" />
<logger name="org.testcontainers.shaded.org.apache.http" level="WARN"/>
<logger name="org.testcontainers.shaded.com.github.dockerjava" level="WARN"/>
<logger name="org.testcontainers" level="INFO"/>
<logger name="org.testcontainers.shaded" level="WARN"/>
<logger name="com.zaxxer.hikari" level="INFO"/>

<turboFilter class="ch.qos.logback.classic.turbo.MarkerFilter">
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<configuration>

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder>
<pattern>%d{HH:mm:ss.SSS} %-5level %logger - %msg%n</pattern>
</encoder>
</appender>

<root level="debug">
<appender-ref ref="STDOUT"/>
</root>

<logger name="org.apache.http" level="WARN"/>
<logger name="com.github.dockerjava" level="WARN"/>
<logger name="org.zeroturnaround.exec" level="WARN"/>
<logger name="com.zaxxer.hikari" level="INFO"/>
<logger name="org.rnorth.tcpunixsocketproxy" level="INFO" />
<logger name="io.netty" level="WARN" />
<logger name="org.mongodb" level="INFO" />
<logger name="org.testcontainers" level="INFO"/>
<logger name="org.testcontainers.shaded" level="WARN"/>
<logger name="com.zaxxer.hikari" level="INFO"/>

<turboFilter class="ch.qos.logback.classic.turbo.MarkerFilter">
<Marker>PROFILER</Marker>
<OnMatch>DENY</OnMatch>
</turboFilter>
</configuration>

0 comments on commit a3c0fee

Please sign in to comment.