diff options
-rw-r--r-- | docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/Docker.java | 8 | ||||
-rw-r--r-- | docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImpl.java | 13 | ||||
-rw-r--r-- | node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerImageGarbageCollector.java (renamed from docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImageGarbageCollector.java) | 11 | ||||
-rw-r--r-- | node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperations.java | 1 | ||||
-rw-r--r-- | node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java | 4 | ||||
-rw-r--r-- | node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/DockerImageGarbageCollectorTest.java (renamed from docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/DockerImageGarbageCollectionTest.java) | 11 | ||||
-rw-r--r-- | node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerMock.java | 15 |
7 files changed, 35 insertions, 28 deletions
diff --git a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/Docker.java b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/Docker.java index 1729c4843ef..d31fbd52d96 100644 --- a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/Docker.java +++ b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/Docker.java @@ -1,6 +1,7 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.dockerapi; +import com.github.dockerjava.api.model.Image; import com.yahoo.config.provision.DockerImage; import java.net.InetAddress; @@ -16,6 +17,8 @@ import java.util.OptionalLong; */ public interface Docker { + void deleteImage(DockerImage dockerImage); + interface CreateContainerCommand { CreateContainerCommand withHostName(String hostname); CreateContainerCommand withResources(ContainerResources containerResources); @@ -84,10 +87,7 @@ public interface Docker { /** List all containers, including those not running. */ List<ContainerLite> listAllContainers(); - /** - * Deletes the local images that are currently not in use by any container and not recently used. - */ - boolean deleteUnusedDockerImages(List<DockerImage> excludes, Duration minImageAgeToDelete); + List<Image> listAllImages(); /** * @param containerName The name of the container diff --git a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImpl.java b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImpl.java index 683c8a98788..42044d08c5c 100644 --- a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImpl.java +++ b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImpl.java @@ -56,7 +56,6 @@ public class DockerImpl implements Docker { private final Set<DockerImage> scheduledPulls = new HashSet<>(); private final DockerClient dockerClient; - private final DockerImageGarbageCollector dockerImageGC; private final CounterWrapper numberOfDockerDaemonFails; @Inject @@ -66,7 +65,6 @@ public class DockerImpl implements Docker { DockerImpl(DockerClient dockerClient, MetricReceiverWrapper metricReceiver) { this.dockerClient = dockerClient; - this.dockerImageGC = new DockerImageGarbageCollector(this); Dimensions dimensions = new Dimensions.Builder().add("role", "docker").build(); numberOfDockerDaemonFails = metricReceiver.declareCounter(MetricReceiverWrapper.APPLICATION_DOCKER, dimensions, "daemon.api_fails"); @@ -312,7 +310,8 @@ public class DockerImpl implements Docker { } } - List<Image> listAllImages() { + @Override + public List<Image> listAllImages() { try { return dockerClient.listImagesCmd().withShowAll(true).exec(); } catch (RuntimeException e) { @@ -321,7 +320,8 @@ public class DockerImpl implements Docker { } } - void deleteImage(DockerImage dockerImage) { + @Override + public void deleteImage(DockerImage dockerImage) { try { dockerClient.removeImageCmd(dockerImage.asString()).exec(); } catch (NotFoundException ignored) { @@ -332,11 +332,6 @@ public class DockerImpl implements Docker { } } - @Override - public boolean deleteUnusedDockerImages(List<DockerImage> excludes, Duration minImageAgeToDelete) { - return dockerImageGC.deleteUnusedDockerImages(excludes, minImageAgeToDelete); - } - private class ImagePullCallback extends PullImageResultCallback { private final DockerImage dockerImage; diff --git a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImageGarbageCollector.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerImageGarbageCollector.java index 242332ebd54..4ac336f4c01 100644 --- a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImageGarbageCollector.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerImageGarbageCollector.java @@ -1,11 +1,12 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.vespa.hosted.dockerapi; +package com.yahoo.vespa.hosted.node.admin.docker; -import com.github.dockerjava.api.model.Container; import com.github.dockerjava.api.model.Image; import com.google.common.base.Strings; import com.yahoo.collections.Pair; import com.yahoo.config.provision.DockerImage; +import com.yahoo.vespa.hosted.dockerapi.ContainerLite; +import com.yahoo.vespa.hosted.dockerapi.Docker; import java.time.Clock; import java.time.Duration; @@ -52,14 +53,14 @@ class DockerImageGarbageCollector { private static final Logger logger = Logger.getLogger(DockerImageGarbageCollector.class.getName()); private final Map<String, Instant> lastTimeUsedByImageId = new ConcurrentHashMap<>(); - private final DockerImpl docker; + private final Docker docker; private final Clock clock; - DockerImageGarbageCollector(DockerImpl docker) { + DockerImageGarbageCollector(Docker docker) { this(docker, Clock.systemUTC()); } - DockerImageGarbageCollector(DockerImpl docker, Clock clock) { + DockerImageGarbageCollector(Docker docker, Clock clock) { this.docker = docker; this.clock = clock; } diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperations.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperations.java index 6adf9a5c0b6..6a53581becb 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperations.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperations.java @@ -54,5 +54,6 @@ public interface DockerOperations { List<ContainerLite> listContainers(); + /** Deletes the local images that are currently not in use by any container and not recently used. */ boolean deleteUnusedDockerImages(List<DockerImage> wantedImages, Duration minImageAgeToDelete); } diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java index 1a0e59a58e1..6fc41082c12 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java @@ -49,6 +49,7 @@ public class DockerOperationsImpl implements DockerOperations { private final Docker docker; private final ProcessExecuter processExecuter; private final IPAddresses ipAddresses; + private final DockerImageGarbageCollector dockerImageGC; public DockerOperationsImpl(Docker docker) { this(docker, new ProcessExecuter(), new IPAddressesImpl()); @@ -58,6 +59,7 @@ public class DockerOperationsImpl implements DockerOperations { this.docker = docker; this.processExecuter = processExecuter; this.ipAddresses = ipAddresses; + this.dockerImageGC = new DockerImageGarbageCollector(docker); } @Override @@ -337,7 +339,7 @@ public class DockerOperationsImpl implements DockerOperations { @Override public boolean deleteUnusedDockerImages(List<DockerImage> wantedImages, Duration minImageAgeToDelete) { - return docker.deleteUnusedDockerImages(wantedImages, minImageAgeToDelete); + return dockerImageGC.deleteUnusedDockerImages(wantedImages, minImageAgeToDelete); } /** Returns whether given nodeType is a Docker host for infrastructure nodes */ diff --git a/docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/DockerImageGarbageCollectionTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/DockerImageGarbageCollectorTest.java index 520f8a74d58..152ea480a1c 100644 --- a/docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/DockerImageGarbageCollectionTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/DockerImageGarbageCollectorTest.java @@ -1,5 +1,5 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.vespa.hosted.dockerapi; +package com.yahoo.vespa.hosted.node.admin.docker; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; @@ -7,7 +7,10 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.github.dockerjava.api.model.Image; import com.yahoo.config.provision.DockerImage; import com.yahoo.test.ManualClock; +import com.yahoo.vespa.hosted.dockerapi.ContainerLite; +import com.yahoo.vespa.hosted.dockerapi.DockerImpl; import org.junit.Test; +import org.mockito.Matchers; import java.io.IOException; import java.time.Duration; @@ -18,8 +21,8 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.eq; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @@ -28,7 +31,7 @@ import static org.mockito.Mockito.when; /** * @author freva */ -public class DockerImageGarbageCollectionTest { +public class DockerImageGarbageCollectorTest { private final ImageGcTester gcTester = new ImageGcTester(); diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerMock.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerMock.java index 7ffb986f9a3..c0ff3d857ad 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerMock.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerMock.java @@ -1,6 +1,7 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.node.admin.integrationTests; +import com.github.dockerjava.api.model.Image; import com.yahoo.config.provision.DockerImage; import com.yahoo.vespa.hosted.dockerapi.Container; import com.yahoo.vespa.hosted.dockerapi.ContainerLite; @@ -83,11 +84,6 @@ public class DockerMock implements Docker { } @Override - public boolean deleteUnusedDockerImages(List<DockerImage> excludes, Duration minImageAgeToDelete) { - return false; - } - - @Override public ProcessResult executeInContainerAsUser(ContainerName containerName, String user, OptionalLong timeout, String... args) { return new ProcessResult(0, null, ""); } @@ -97,6 +93,15 @@ public class DockerMock implements Docker { return List.of(); } + @Override + public List<Image> listAllImages() { + return List.of(); + } + + @Override + public void deleteImage(DockerImage dockerImage) { + } + public class StartContainerCommandMock implements CreateContainerCommand { private final DockerImage dockerImage; |