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/DockerImageGarbageCollector.java (renamed from node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerImageGarbageCollector.java) | 11 | ||||
-rw-r--r-- | docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImpl.java | 13 | ||||
-rw-r--r-- | docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/DockerImageGarbageCollectionTest.java (renamed from node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/DockerImageGarbageCollectorTest.java) | 11 | ||||
-rw-r--r-- | node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperations.java | 4 | ||||
-rw-r--r-- | node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java | 8 | ||||
-rw-r--r-- | node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerMock.java | 15 |
7 files changed, 27 insertions, 43 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 d31fbd52d96..1729c4843ef 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,7 +1,6 @@ // 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; @@ -17,8 +16,6 @@ import java.util.OptionalLong; */ public interface Docker { - void deleteImage(DockerImage dockerImage); - interface CreateContainerCommand { CreateContainerCommand withHostName(String hostname); CreateContainerCommand withResources(ContainerResources containerResources); @@ -87,7 +84,10 @@ public interface Docker { /** List all containers, including those not running. */ List<ContainerLite> listAllContainers(); - List<Image> listAllImages(); + /** + * Deletes the local images that are currently not in use by any container and not recently used. + */ + boolean deleteUnusedDockerImages(List<DockerImage> excludes, Duration minImageAgeToDelete); /** * @param containerName The name of the container diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerImageGarbageCollector.java b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImageGarbageCollector.java index 4ac336f4c01..242332ebd54 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerImageGarbageCollector.java +++ b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImageGarbageCollector.java @@ -1,12 +1,11 @@ // 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.docker; +package com.yahoo.vespa.hosted.dockerapi; +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; @@ -53,14 +52,14 @@ class DockerImageGarbageCollector { private static final Logger logger = Logger.getLogger(DockerImageGarbageCollector.class.getName()); private final Map<String, Instant> lastTimeUsedByImageId = new ConcurrentHashMap<>(); - private final Docker docker; + private final DockerImpl docker; private final Clock clock; - DockerImageGarbageCollector(Docker docker) { + DockerImageGarbageCollector(DockerImpl docker) { this(docker, Clock.systemUTC()); } - DockerImageGarbageCollector(Docker docker, Clock clock) { + DockerImageGarbageCollector(DockerImpl docker, Clock clock) { this.docker = docker; this.clock = clock; } 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 42044d08c5c..683c8a98788 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,6 +56,7 @@ 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 @@ -65,6 +66,7 @@ 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"); @@ -310,8 +312,7 @@ public class DockerImpl implements Docker { } } - @Override - public List<Image> listAllImages() { + List<Image> listAllImages() { try { return dockerClient.listImagesCmd().withShowAll(true).exec(); } catch (RuntimeException e) { @@ -320,8 +321,7 @@ public class DockerImpl implements Docker { } } - @Override - public void deleteImage(DockerImage dockerImage) { + void deleteImage(DockerImage dockerImage) { try { dockerClient.removeImageCmd(dockerImage.asString()).exec(); } catch (NotFoundException ignored) { @@ -332,6 +332,11 @@ 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/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/DockerImageGarbageCollectorTest.java b/docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/DockerImageGarbageCollectionTest.java index 152ea480a1c..520f8a74d58 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/DockerImageGarbageCollectorTest.java +++ b/docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/DockerImageGarbageCollectionTest.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.node.admin.docker; +package com.yahoo.vespa.hosted.dockerapi; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; @@ -7,10 +7,7 @@ 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; @@ -21,8 +18,8 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @@ -31,7 +28,7 @@ import static org.mockito.Mockito.when; /** * @author freva */ -public class DockerImageGarbageCollectorTest { +public class DockerImageGarbageCollectionTest { private final ImageGcTester gcTester = new ImageGcTester(); 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 6a53581becb..750129749ea 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 @@ -10,7 +10,6 @@ import com.yahoo.vespa.hosted.dockerapi.ProcessResult; import com.yahoo.vespa.hosted.node.admin.nodeagent.ContainerData; import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentContext; -import java.time.Duration; import java.util.List; import java.util.Optional; @@ -53,7 +52,4 @@ public interface DockerOperations { Optional<ContainerStats> getContainerStats(NodeAgentContext context); 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 6fc41082c12..7c34f4d983f 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 @@ -23,7 +23,6 @@ import java.net.Inet6Address; import java.net.InetAddress; import java.nio.file.Path; import java.nio.file.Paths; -import java.time.Duration; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -49,7 +48,6 @@ 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()); @@ -59,7 +57,6 @@ public class DockerOperationsImpl implements DockerOperations { this.docker = docker; this.processExecuter = processExecuter; this.ipAddresses = ipAddresses; - this.dockerImageGC = new DockerImageGarbageCollector(docker); } @Override @@ -337,11 +334,6 @@ public class DockerOperationsImpl implements DockerOperations { return docker.listAllContainers(); } - @Override - public boolean deleteUnusedDockerImages(List<DockerImage> wantedImages, Duration minImageAgeToDelete) { - return dockerImageGC.deleteUnusedDockerImages(wantedImages, minImageAgeToDelete); - } - /** Returns whether given nodeType is a Docker host for infrastructure nodes */ private static boolean isInfrastructureHost(NodeType nodeType) { return nodeType == NodeType.config || 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 c0ff3d857ad..7ffb986f9a3 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,7 +1,6 @@ // 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; @@ -84,24 +83,20 @@ public class DockerMock implements Docker { } @Override - public ProcessResult executeInContainerAsUser(ContainerName containerName, String user, OptionalLong timeout, String... args) { - return new ProcessResult(0, null, ""); + public boolean deleteUnusedDockerImages(List<DockerImage> excludes, Duration minImageAgeToDelete) { + return false; } @Override - public List<ContainerLite> listAllContainers() { - return List.of(); + public ProcessResult executeInContainerAsUser(ContainerName containerName, String user, OptionalLong timeout, String... args) { + return new ProcessResult(0, null, ""); } @Override - public List<Image> listAllImages() { + public List<ContainerLite> listAllContainers() { return List.of(); } - @Override - public void deleteImage(DockerImage dockerImage) { - } - public class StartContainerCommandMock implements CreateContainerCommand { private final DockerImage dockerImage; |