From 7a957d5819a3fa6964db285a46eb77c0b9360163 Mon Sep 17 00:00:00 2001 From: Sergei Egorov Date: Tue, 17 May 2022 18:02:08 -0400 Subject: [PATCH] Remove the disk space check (#5381) --- core/build.gradle | 4 +- .../testcontainers/DockerClientFactory.java | 102 +----------------- .../utility/RyukResourceReaper.java | 8 +- .../DockerClientFactoryTest.java | 11 -- 4 files changed, 8 insertions(+), 117 deletions(-) diff --git a/core/build.gradle b/core/build.gradle index 2a81eb8568a..efb08991f8d 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -40,7 +40,9 @@ tasks.japicmp { "org.testcontainers.shaded.*", ] - classExcludes = [] + classExcludes = [ + "org.testcontainers.utility.RyukResourceReaper", + ] methodExcludes = [ "org.testcontainers.containers.Container#getDockerClient()", diff --git a/core/src/main/java/org/testcontainers/DockerClientFactory.java b/core/src/main/java/org/testcontainers/DockerClientFactory.java index cc85645b2b4..c1e999d392a 100644 --- a/core/src/main/java/org/testcontainers/DockerClientFactory.java +++ b/core/src/main/java/org/testcontainers/DockerClientFactory.java @@ -2,7 +2,6 @@ import com.github.dockerjava.api.DockerClient; import com.github.dockerjava.api.DockerClientDelegate; -import com.github.dockerjava.api.async.ResultCallback; import com.github.dockerjava.api.command.CreateContainerCmd; import com.github.dockerjava.api.command.PullImageCmd; import com.github.dockerjava.api.exception.DockerClientException; @@ -10,7 +9,6 @@ import com.github.dockerjava.api.exception.NotFoundException; import com.github.dockerjava.api.model.AccessMode; import com.github.dockerjava.api.model.Bind; -import com.github.dockerjava.api.model.Frame; import com.github.dockerjava.api.model.Info; import com.github.dockerjava.api.model.Version; import com.github.dockerjava.api.model.Volume; @@ -31,18 +29,14 @@ import org.testcontainers.utility.DockerImageName; import org.testcontainers.utility.MountableFile; import org.testcontainers.utility.ResourceReaper; -import org.testcontainers.utility.RyukResourceReaper; import org.testcontainers.utility.TestcontainersConfiguration; -import java.io.ByteArrayOutputStream; -import java.io.IOException; import java.io.InputStream; import java.net.URI; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Optional; import java.util.ServiceLoader; import java.util.UUID; import java.util.function.BiFunction; @@ -80,16 +74,10 @@ public class DockerClientFactory { RuntimeException cachedClientFailure; private String activeApiVersion; - private String activeExecutionDriver; @Getter(lazy = true) private final boolean fileMountingSupported = checkMountableFile(); - - static { - System.setProperty("org.testcontainers.shaded.io.netty.packagePrefix", "org.testcontainers.shaded."); - } - @VisibleForTesting DockerClientFactory() { @@ -200,20 +188,19 @@ public void close() { log.info("Docker host IP address is {}", strategy.getDockerHostIpAddress()); Info dockerInfo = strategy.getInfo(); + log.debug("Docker info: {}", dockerInfo.getRawValues()); Version version = client.versionCmd().exec(); + log.debug("Docker version: {}", version.getRawValues()); activeApiVersion = version.getApiVersion(); - activeExecutionDriver = dockerInfo.getExecutionDriver(); log.info("Connected to docker: \n" + " Server Version: " + dockerInfo.getServerVersion() + "\n" + " API Version: " + activeApiVersion + "\n" + " Operating System: " + dockerInfo.getOperatingSystem() + "\n" + " Total Memory: " + dockerInfo.getMemTotal() / (1024 * 1024) + " MB"); - final ResourceReaper resourceReaper; try { - resourceReaper = ResourceReaper.instance(); //noinspection deprecation - resourceReaper.init(); + ResourceReaper.instance().init(); } catch (RuntimeException e) { cachedClientFailure = e; throw e; @@ -226,27 +213,6 @@ public void close() { try { log.info("Checking the system..."); checkDockerVersion(version.getVersion()); - - //noinspection deprecation - String ryukContainerId = resourceReaper instanceof RyukResourceReaper - ? ((RyukResourceReaper) resourceReaper).getContainerId() - : null; - - if (ryukContainerId != null) { - checkDiskSpace(client, ryukContainerId); - } else { - runInsideDocker( - createContainerCmd -> { - createContainerCmd.withName("testcontainers-checks-" + SESSION_ID); - createContainerCmd.getHostConfig().withAutoRemove(true); - createContainerCmd.withCmd("tail", "-f", "/dev/null"); - }, - (__, containerId) -> { - checkDiskSpace(client, containerId); - return ""; - } - ); - } } catch (RuntimeException e) { cachedClientFailure = e; throw e; @@ -263,43 +229,6 @@ private void checkDockerVersion(String dockerVersion) { check("Docker server version should be at least 1.6.0", versionIsSufficient); } - private void checkDiskSpace(DockerClient dockerClient, String id) { - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - - try { - dockerClient - .execStartCmd(dockerClient.execCreateCmd(id).withAttachStdout(true).withCmd("df", "-P").exec().getId()) - .exec(new ResultCallback.Adapter() { - @Override - public void onNext(Frame frame) { - if (frame == null) { - return; - } - switch (frame.getStreamType()) { - case RAW: - case STDOUT: - try { - outputStream.write(frame.getPayload()); - outputStream.flush(); - } catch (IOException e) { - onError(e); - } - } - } - }) - .awaitCompletion(); - } catch (Exception e) { - log.debug("Can't exec disk checking command", e); - } - - DiskSpaceUsage df = parseAvailableDiskSpace(outputStream.toString()); - - check( - "Docker environment should have more than 2GB free disk space", - df.availableMB.map(it -> it >= 2048).orElse(true) - ); - } - private void check(String message, boolean isSuccessful) { if (isSuccessful) { log.info("\u2714\ufe0e {}", message); @@ -389,28 +318,6 @@ T runInsideDocker(DockerImageName imageName, Consumer cr } } - @VisibleForTesting - static class DiskSpaceUsage { - Optional availableMB = Optional.empty(); - Optional usedPercent = Optional.empty(); - } - - @VisibleForTesting - DiskSpaceUsage parseAvailableDiskSpace(String dfOutput) { - DiskSpaceUsage df = new DiskSpaceUsage(); - String[] lines = dfOutput.split("\n"); - for (String line : lines) { - String[] fields = line.split("\\s+"); - if (fields.length > 5 && fields[5].equals("/")) { - long availableKB = Long.parseLong(fields[3]); - df.availableMB = Optional.of(availableKB / 1024L); - df.usedPercent = Optional.of(Integer.valueOf(fields[4].replace("%", ""))); - break; - } - } - return df; - } - /** * @return the docker API version of the daemon that we have connected to */ @@ -423,8 +330,7 @@ public String getActiveApiVersion() { * @return the docker execution driver of the daemon that we have connected to */ public String getActiveExecutionDriver() { - client(); - return activeExecutionDriver; + return getInfo().getExecutionDriver(); } /** diff --git a/core/src/main/java/org/testcontainers/utility/RyukResourceReaper.java b/core/src/main/java/org/testcontainers/utility/RyukResourceReaper.java index c2e2cf4ef97..6ce9c372fd2 100644 --- a/core/src/main/java/org/testcontainers/utility/RyukResourceReaper.java +++ b/core/src/main/java/org/testcontainers/utility/RyukResourceReaper.java @@ -21,11 +21,9 @@ * Ryuk-based {@link ResourceReaper} implementation. * * @see moby-ryuk - * @deprecated internal API */ -@Deprecated @Slf4j -public class RyukResourceReaper extends ResourceReaper { +class RyukResourceReaper extends ResourceReaper { private static final RateLimiter RYUK_ACK_RATE_LIMITER = RateLimiterBuilder .newBuilder() @@ -37,10 +35,6 @@ public class RyukResourceReaper extends ResourceReaper { private final RyukContainer ryukContainer = new RyukContainer(); - public String getContainerId() { - return ryukContainer.getContainerId(); - } - @Override public void init() { if (!TestcontainersConfiguration.getInstance().environmentSupportsReuse()) { diff --git a/core/src/test/java/org/testcontainers/DockerClientFactoryTest.java b/core/src/test/java/org/testcontainers/DockerClientFactoryTest.java index 247a16a76a6..a889764579f 100644 --- a/core/src/test/java/org/testcontainers/DockerClientFactoryTest.java +++ b/core/src/test/java/org/testcontainers/DockerClientFactoryTest.java @@ -2,8 +2,6 @@ import org.junit.Rule; import org.junit.Test; -import org.rnorth.visibleassertions.VisibleAssertions; -import org.testcontainers.DockerClientFactory.DiskSpaceUsage; import org.testcontainers.dockerclient.LogToStringContainerCallback; import org.testcontainers.utility.DockerImageName; import org.testcontainers.utility.MockTestcontainersConfigurationRule; @@ -39,15 +37,6 @@ public void runCommandInsideDockerShouldNotFailIfImageDoesNotExistsLocally() { } } - @Test - public void shouldHandleBigDiskSize() throws Exception { - String dfOutput = "/dev/disk1 2982480572 1491240286 2982480572 31% /"; - DiskSpaceUsage usage = DockerClientFactory.instance().parseAvailableDiskSpace(dfOutput); - - VisibleAssertions.assertEquals("Available MB is correct", 2982480572L / 1024L, usage.availableMB.orElse(0L)); - VisibleAssertions.assertEquals("Available percentage is correct", 31, usage.usedPercent.orElse(0)); - } - @Test public void dockerHostIpAddress() { DockerClientFactory instance = new DockerClientFactory();