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/DockerImpl.java13
-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.java1
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java4
-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.java15
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;