summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/Docker.java8
-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.java13
-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.java4
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java8
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerMock.java15
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;