Skip to content

Commit 816b8c3

Browse files
bsideuprnorth
andauthored
Fix log-related leaks (#2883)
* Fix log-related leaks * Update core/src/main/java/org/testcontainers/utility/ResourceReaper.java Co-authored-by: Richard North <[email protected]> * Update core/src/main/java/org/testcontainers/utility/ResourceReaper.java Co-authored-by: Richard North <[email protected]> Co-authored-by: Richard North <[email protected]>
1 parent 780b8e3 commit 816b8c3

File tree

2 files changed

+17
-10
lines changed

2 files changed

+17
-10
lines changed

core/src/main/java/org/testcontainers/containers/ExecInContainerPattern.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,12 @@ public Container.ExecResult execInContainer(InspectContainerResponse containerIn
7373
final ToStringConsumer stdoutConsumer = new ToStringConsumer();
7474
final ToStringConsumer stderrConsumer = new ToStringConsumer();
7575

76-
FrameConsumerResultCallback callback = new FrameConsumerResultCallback();
77-
callback.addConsumer(OutputFrame.OutputType.STDOUT, stdoutConsumer);
78-
callback.addConsumer(OutputFrame.OutputType.STDERR, stderrConsumer);
76+
try (FrameConsumerResultCallback callback = new FrameConsumerResultCallback()) {
77+
callback.addConsumer(OutputFrame.OutputType.STDOUT, stdoutConsumer);
78+
callback.addConsumer(OutputFrame.OutputType.STDERR, stderrConsumer);
7979

80-
dockerClient.execStartCmd(execCreateCmdResponse.getId()).exec(callback).awaitCompletion();
80+
dockerClient.execStartCmd(execCreateCmdResponse.getId()).exec(callback).awaitCompletion();
81+
}
8182
Integer exitCode = dockerClient.inspectExecCmd(execCreateCmdResponse.getId()).exec().getExitCode();
8283

8384
final Container.ExecResult result = new Container.ExecResult(

core/src/main/java/org/testcontainers/utility/ResourceReaper.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public static String start(String hostIpAddress, DockerClient client) {
9393

9494
StringBuilder ryukLog = new StringBuilder();
9595

96-
client.logContainerCmd(ryukContainerId)
96+
ResultCallback.Adapter<Frame> logCallback = client.logContainerCmd(ryukContainerId)
9797
.withSince(0)
9898
.withFollowStream(true)
9999
.withStdOut(true)
@@ -164,11 +164,17 @@ public void onNext(Frame frame) {
164164
);
165165
kiraThread.setDaemon(true);
166166
kiraThread.start();
167-
168-
// We need to wait before we can start any containers to make sure that we delete them
169-
if (!ryukScheduledLatch.await(TestcontainersConfiguration.getInstance().getRyukTimeout(), TimeUnit.SECONDS)) {
170-
log.error("Timeout out waiting for Ryuk. Ryuk's log:\n{}", ryukLog);
171-
throw new IllegalStateException(String.format("Can not connect to Ryuk at %s:%s", hostIpAddress, ryukPort));
167+
try {
168+
// We need to wait before we can start any containers to make sure that we delete them
169+
if (!ryukScheduledLatch.await(TestcontainersConfiguration.getInstance().getRyukTimeout(), TimeUnit.SECONDS)) {
170+
log.error("Timed out waiting for Ryuk container to start. Ryuk's logs:\n{}", ryukLog);
171+
throw new IllegalStateException(String.format("Could not connect to Ryuk at %s:%s", hostIpAddress, ryukPort));
172+
}
173+
} finally {
174+
try {
175+
logCallback.close();
176+
} catch (IOException ignored) {
177+
}
172178
}
173179

174180
return ryukContainerId;

0 commit comments

Comments
 (0)