summaryrefslogtreecommitdiffstats
path: root/docker-api
diff options
context:
space:
mode:
authorHåkon Hallingstad <hakon@verizonmedia.com>2020-09-08 09:00:56 +0200
committerHåkon Hallingstad <hakon@verizonmedia.com>2020-09-08 09:00:56 +0200
commit92494ee6cb4b373c0a3ddf44997dc2a1ec35ef0d (patch)
tree79c7d6b106a66e1338edea956a15bd1ed6310030 /docker-api
parente858dfe2815e6ffda326f69f1a62bcb0f4c2c3db (diff)
Avoid renaming DockerImage which is used in the config model
Diffstat (limited to 'docker-api')
-rw-r--r--docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/Container.java6
-rw-r--r--docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/ContainerEngine.java10
-rw-r--r--docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/CreateContainerCommandImpl.java12
-rw-r--r--docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImageGarbageCollector.java16
-rw-r--r--docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImpl.java48
-rw-r--r--docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/CreateContainerCommandImplTest.java6
-rw-r--r--docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/DockerImageGarbageCollectionTest.java (renamed from docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/ContainerImageGarbageCollectionTest.java)10
-rw-r--r--docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/DockerImplTest.java6
8 files changed, 57 insertions, 57 deletions
diff --git a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/Container.java b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/Container.java
index 2eed86a26de..1e861f230ce 100644
--- a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/Container.java
+++ b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/Container.java
@@ -1,7 +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.yahoo.config.provision.ContainerImage;
+import com.yahoo.config.provision.DockerImage;
import java.util.Objects;
@@ -10,7 +10,7 @@ import java.util.Objects;
*/
public class Container {
public final String hostname;
- public final ContainerImage image;
+ public final DockerImage image;
public final ContainerResources resources;
public final ContainerName name;
public final State state;
@@ -18,7 +18,7 @@ public class Container {
public Container(
final String hostname,
- final ContainerImage image,
+ final DockerImage image,
final ContainerResources resources,
final ContainerName containerName,
final State state,
diff --git a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/ContainerEngine.java b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/ContainerEngine.java
index 2ba82b83287..984e1261d63 100644
--- a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/ContainerEngine.java
+++ b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/ContainerEngine.java
@@ -1,7 +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.yahoo.config.provision.ContainerImage;
+import com.yahoo.config.provision.DockerImage;
import java.net.InetAddress;
import java.nio.file.Path;
@@ -58,7 +58,7 @@ public interface ContainerEngine {
void create();
}
- CreateContainerCommand createContainerCommand(ContainerImage containerImage, ContainerName containerName);
+ CreateContainerCommand createContainerCommand(DockerImage dockerImage, ContainerName containerName);
Optional<ContainerStats> getContainerStats(ContainerName containerName);
@@ -76,14 +76,14 @@ public interface ContainerEngine {
* Checks if the image is currently being pulled or is already pulled, if not, starts an async
* pull of the image
*
- * @param image Container image to pull
+ * @param image Docker image to pull
* @return true iff image being pulled, false otherwise
*/
- boolean pullImageAsyncIfNeeded(ContainerImage image);
+ boolean pullImageAsyncIfNeeded(DockerImage image);
boolean noManagedContainersRunning(String manager);
- boolean deleteUnusedContainerImages(List<ContainerImage> excludes, Duration minImageAgeToDelete);
+ boolean deleteUnusedDockerImages(List<DockerImage> excludes, Duration minImageAgeToDelete);
/**
* @param containerName The name of the container
diff --git a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/CreateContainerCommandImpl.java b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/CreateContainerCommandImpl.java
index 38c3074afe5..ed2c4501110 100644
--- a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/CreateContainerCommandImpl.java
+++ b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/CreateContainerCommandImpl.java
@@ -7,7 +7,7 @@ import com.github.dockerjava.api.model.Bind;
import com.github.dockerjava.api.model.Capability;
import com.github.dockerjava.api.model.HostConfig;
import com.github.dockerjava.api.model.Ulimit;
-import com.yahoo.config.provision.ContainerImage;
+import com.yahoo.config.provision.DockerImage;
import com.yahoo.vespa.hosted.dockerapi.exception.DockerException;
import java.net.Inet6Address;
@@ -29,7 +29,7 @@ import static com.yahoo.vespa.hosted.dockerapi.DockerImpl.LABEL_NAME_MANAGEDBY;
class CreateContainerCommandImpl implements ContainerEngine.CreateContainerCommand {
private final DockerClient docker;
- private final ContainerImage containerImage;
+ private final DockerImage dockerImage;
private final ContainerName containerName;
private final Map<String, String> labels = new HashMap<>();
private final List<String> environmentAssignments = new ArrayList<>();
@@ -48,9 +48,9 @@ class CreateContainerCommandImpl implements ContainerEngine.CreateContainerComma
private Optional<String[]> entrypoint = Optional.empty();
private boolean privileged = false;
- CreateContainerCommandImpl(DockerClient docker, ContainerImage containerImage, ContainerName containerName) {
+ CreateContainerCommandImpl(DockerClient docker, DockerImage dockerImage, ContainerName containerName) {
this.docker = docker;
- this.containerImage = containerImage;
+ this.dockerImage = dockerImage;
this.containerName = containerName;
}
@@ -190,7 +190,7 @@ class CreateContainerCommandImpl implements ContainerEngine.CreateContainerComma
.withCpuQuota(cr.cpuQuota() > 0 ? (long) cr.cpuQuota() : null));
final CreateContainerCmd containerCmd = docker
- .createContainerCmd(containerImage.asString())
+ .createContainerCmd(dockerImage.asString())
.withHostConfig(hostConfig)
.withName(containerName.asString())
.withLabels(labels)
@@ -255,7 +255,7 @@ class CreateContainerCommandImpl implements ContainerEngine.CreateContainerComma
toOptionalOption("--ip6", ipv6Address),
toOptionalOption("--entrypoint", entrypointExecuteable),
toFlagOption("--privileged", privileged),
- containerImage.asString(),
+ dockerImage.asString(),
entrypointArgs)
.filter(s -> !s.isEmpty())
.collect(Collectors.joining(" "));
diff --git a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImageGarbageCollector.java b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImageGarbageCollector.java
index d4b44b8dff6..e2116f7037e 100644
--- a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImageGarbageCollector.java
+++ b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImageGarbageCollector.java
@@ -5,7 +5,7 @@ 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.ContainerImage;
+import com.yahoo.config.provision.DockerImage;
import java.time.Clock;
import java.time.Duration;
@@ -72,7 +72,7 @@ class DockerImageGarbageCollector {
* @param minImageAgeToDelete Minimum duration after which an image can be removed if it has not been used
* @return true iff at least 1 image was deleted
*/
- boolean deleteUnusedDockerImages(List<ContainerImage> excludes, Duration minImageAgeToDelete) {
+ boolean deleteUnusedDockerImages(List<DockerImage> excludes, Duration minImageAgeToDelete) {
List<Image> images = docker.listAllImages();
List<Container> containers = docker.listAllContainers();
@@ -100,7 +100,7 @@ class DockerImageGarbageCollector {
Set<String> imagesToKeep = Stream
.concat(
getRecentlyUsedImageIds(images, containers, minImageAgeToDelete).stream(), // 1
- containerImageToImageIds(excludes, images).stream()) // 2
+ dockerImageToImageIds(excludes, images).stream()) // 2
.flatMap(imageId -> ancestorsByImageId.getOrDefault(imageId, Collections.emptySet()).stream()) // 3
.collect(Collectors.toSet());
@@ -128,7 +128,7 @@ class DockerImageGarbageCollector {
// Deleting an image by image ID with multiple tags will fail -> delete by tags instead
referencesOf(image).forEach(imageReference -> {
logger.info("Deleting unused docker image " + imageReference);
- docker.deleteImage(ContainerImage.fromString(imageReference));
+ docker.deleteImage(DockerImage.fromString(imageReference));
});
lastTimeUsedByImageId.remove(image.getId());
})
@@ -152,18 +152,18 @@ class DockerImageGarbageCollector {
}
/**
- * Attemps to make containerImages which may be image tags or image ids to image ids. This only works
+ * Attemps to make dockerImages which may be image tags or image ids to image ids. This only works
* if the given tag is actually present locally. This is fine, because if it isn't - we can't delete
* it, so no harm done.
*/
- private Set<String> containerImageToImageIds(List<ContainerImage> containerImages, List<Image> images) {
+ private Set<String> dockerImageToImageIds(List<DockerImage> dockerImages, List<Image> images) {
Map<String, String> imageIdByImageTag = images.stream()
.flatMap(image -> referencesOf(image).stream()
.map(repoTag -> new Pair<>(repoTag, image.getId())))
.collect(Collectors.toMap(Pair::getFirst, Pair::getSecond));
- return containerImages.stream()
- .map(ContainerImage::asString)
+ return dockerImages.stream()
+ .map(DockerImage::asString)
.map(tag -> imageIdByImageTag.getOrDefault(tag, tag))
.collect(Collectors.toSet());
}
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 15bafa9b561..6125a0ec2d8 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
@@ -21,7 +21,7 @@ import com.github.dockerjava.core.command.ExecStartResultCallback;
import com.github.dockerjava.core.command.PullImageResultCallback;
import com.github.dockerjava.jaxrs.JerseyDockerCmdExecFactory;
import com.google.inject.Inject;
-import com.yahoo.config.provision.ContainerImage;
+import com.yahoo.config.provision.DockerImage;
import com.yahoo.vespa.hosted.dockerapi.exception.ContainerNotFoundException;
import com.yahoo.vespa.hosted.dockerapi.exception.DockerException;
import com.yahoo.vespa.hosted.dockerapi.exception.DockerExecTimeoutException;
@@ -51,7 +51,7 @@ public class DockerImpl implements ContainerEngine {
private static final Duration WAIT_BEFORE_KILLING = Duration.ofSeconds(10);
private final Object monitor = new Object();
- private final Set<ContainerImage> scheduledPulls = new HashSet<>();
+ private final Set<DockerImage> scheduledPulls = new HashSet<>();
private final DockerClient dockerClient;
private final DockerImageGarbageCollector dockerImageGC;
@@ -70,7 +70,7 @@ public class DockerImpl implements ContainerEngine {
}
@Override
- public boolean pullImageAsyncIfNeeded(ContainerImage image) {
+ public boolean pullImageAsyncIfNeeded(DockerImage image) {
try {
synchronized (monitor) {
if (scheduledPulls.contains(image)) return true;
@@ -89,7 +89,7 @@ public class DockerImpl implements ContainerEngine {
}
}
- private void removeScheduledPoll(ContainerImage image) {
+ private void removeScheduledPoll(DockerImage image) {
synchronized (monitor) {
scheduledPulls.remove(image);
}
@@ -98,23 +98,23 @@ public class DockerImpl implements ContainerEngine {
/**
* Check if a given image is already in the local registry
*/
- boolean imageIsDownloaded(ContainerImage containerImage) {
- return inspectImage(containerImage).isPresent();
+ boolean imageIsDownloaded(DockerImage dockerImage) {
+ return inspectImage(dockerImage).isPresent();
}
- private Optional<InspectImageResponse> inspectImage(ContainerImage containerImage) {
+ private Optional<InspectImageResponse> inspectImage(DockerImage dockerImage) {
try {
- return Optional.of(dockerClient.inspectImageCmd(containerImage.asString()).exec());
+ return Optional.of(dockerClient.inspectImageCmd(dockerImage.asString()).exec());
} catch (NotFoundException e) {
return Optional.empty();
} catch (RuntimeException e) {
numberOfDockerApiFails.increment();
- throw new DockerException("Failed to inspect image '" + containerImage.asString() + "'", e);
+ throw new DockerException("Failed to inspect image '" + dockerImage.asString() + "'", e);
}
}
@Override
- public CreateContainerCommand createContainerCommand(ContainerImage image, ContainerName containerName) {
+ public CreateContainerCommand createContainerCommand(DockerImage image, ContainerName containerName) {
return new CreateContainerCommandImpl(dockerClient, image, containerName);
}
@@ -265,7 +265,7 @@ public class DockerImpl implements ContainerEngine {
return inspectContainerCmd(container)
.map(response -> new Container(
response.getConfig().getHostName(),
- ContainerImage.fromString(response.getConfig().getImage()),
+ DockerImage.fromString(response.getConfig().getImage()),
containerResourcesFromHostConfig(response.getHostConfig()),
new ContainerName(decode(response.getName())),
Container.State.valueOf(response.getState().getStatus().toUpperCase()),
@@ -319,44 +319,44 @@ public class DockerImpl implements ContainerEngine {
}
}
- void deleteImage(ContainerImage containerImage) {
+ void deleteImage(DockerImage dockerImage) {
try {
- dockerClient.removeImageCmd(containerImage.asString()).exec();
+ dockerClient.removeImageCmd(dockerImage.asString()).exec();
} catch (NotFoundException ignored) {
// Image was already deleted, ignore
} catch (RuntimeException e) {
numberOfDockerApiFails.increment();
- throw new DockerException("Failed to delete docker image " + containerImage.asString(), e);
+ throw new DockerException("Failed to delete docker image " + dockerImage.asString(), e);
}
}
@Override
- public boolean deleteUnusedContainerImages(List<ContainerImage> excludes, Duration minImageAgeToDelete) {
+ public boolean deleteUnusedDockerImages(List<DockerImage> excludes, Duration minImageAgeToDelete) {
return dockerImageGC.deleteUnusedDockerImages(excludes, minImageAgeToDelete);
}
private class ImagePullCallback extends PullImageResultCallback {
- private final ContainerImage containerImage;
+ private final DockerImage dockerImage;
- private ImagePullCallback(ContainerImage containerImage) {
- this.containerImage = containerImage;
+ private ImagePullCallback(DockerImage dockerImage) {
+ this.dockerImage = dockerImage;
}
@Override
public void onError(Throwable throwable) {
- removeScheduledPoll(containerImage);
- logger.log(Level.SEVERE, "Could not download image " + containerImage.asString(), throwable);
+ removeScheduledPoll(dockerImage);
+ logger.log(Level.SEVERE, "Could not download image " + dockerImage.asString(), throwable);
}
@Override
public void onComplete() {
- if (imageIsDownloaded(containerImage)) {
- logger.log(Level.INFO, "Download completed: " + containerImage.asString());
- removeScheduledPoll(containerImage);
+ if (imageIsDownloaded(dockerImage)) {
+ logger.log(Level.INFO, "Download completed: " + dockerImage.asString());
+ removeScheduledPoll(dockerImage);
} else {
numberOfDockerApiFails.increment();
- throw new DockerClientException("Could not download image: " + containerImage);
+ throw new DockerClientException("Could not download image: " + dockerImage);
}
}
}
diff --git a/docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/CreateContainerCommandImplTest.java b/docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/CreateContainerCommandImplTest.java
index ea92186e8bd..b4ba6dbb502 100644
--- a/docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/CreateContainerCommandImplTest.java
+++ b/docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/CreateContainerCommandImplTest.java
@@ -1,7 +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.yahoo.config.provision.ContainerImage;
+import com.yahoo.config.provision.DockerImage;
import org.junit.Test;
import java.net.InetAddress;
@@ -14,13 +14,13 @@ public class CreateContainerCommandImplTest {
@Test
public void testToString() throws UnknownHostException {
- ContainerImage containerImage = ContainerImage.fromString("docker.registry.domain.tld/my/image:1.2.3");
+ DockerImage dockerImage = DockerImage.fromString("docker.registry.domain.tld/my/image:1.2.3");
ContainerResources containerResources = new ContainerResources(2.5, 100, 1024);
String hostname = "docker-1.region.domain.tld";
ContainerName containerName = ContainerName.fromHostname(hostname);
ContainerEngine.CreateContainerCommand createContainerCommand = new CreateContainerCommandImpl(
- null, containerImage, containerName)
+ null, dockerImage, containerName)
.withHostName(hostname)
.withResources(containerResources)
.withLabel("my-label", "test-label")
diff --git a/docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/ContainerImageGarbageCollectionTest.java b/docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/DockerImageGarbageCollectionTest.java
index 92c0e52bd6f..40c4cb167a2 100644
--- a/docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/ContainerImageGarbageCollectionTest.java
+++ b/docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/DockerImageGarbageCollectionTest.java
@@ -5,7 +5,7 @@ import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.dockerjava.api.model.Image;
-import com.yahoo.config.provision.ContainerImage;
+import com.yahoo.config.provision.DockerImage;
import com.yahoo.test.ManualClock;
import org.junit.Test;
@@ -28,7 +28,7 @@ import static org.mockito.Mockito.when;
/**
* @author freva
*/
-public class ContainerImageGarbageCollectionTest {
+public class DockerImageGarbageCollectionTest {
private final ImageGcTester gcTester = new ImageGcTester();
@@ -173,7 +173,7 @@ public class ContainerImageGarbageCollectionTest {
private final DockerImpl docker = mock(DockerImpl.class);
private final ManualClock clock = new ManualClock();
private final DockerImageGarbageCollector imageGC = new DockerImageGarbageCollector(docker, clock);
- private final Map<ContainerImage, Integer> numDeletes = new HashMap<>();
+ private final Map<DockerImage, Integer> numDeletes = new HashMap<>();
private boolean initialized = false;
private ImageGcTester withExistingImages(ImageBuilder... images) {
@@ -211,11 +211,11 @@ public class ContainerImageGarbageCollectionTest {
clock.advance(Duration.ofMinutes(minutesAfter));
imageGC.deleteUnusedDockerImages(
- except.stream().map(ContainerImage::fromString).collect(Collectors.toList()),
+ except.stream().map(DockerImage::fromString).collect(Collectors.toList()),
Duration.ofHours(1).minusSeconds(1));
Arrays.stream(imageIds)
- .map(ContainerImage::fromString)
+ .map(DockerImage::fromString)
.forEach(image -> {
int newValue = numDeletes.getOrDefault(image, 0) + 1;
numDeletes.put(image, newValue);
diff --git a/docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/DockerImplTest.java b/docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/DockerImplTest.java
index 5387bc390fe..1ca6cd5662e 100644
--- a/docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/DockerImplTest.java
+++ b/docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/DockerImplTest.java
@@ -13,7 +13,7 @@ import com.github.dockerjava.api.command.InspectImageResponse;
import com.github.dockerjava.api.command.PullImageCmd;
import com.github.dockerjava.api.exception.NotFoundException;
import com.github.dockerjava.core.command.ExecStartResultCallback;
-import com.yahoo.config.provision.ContainerImage;
+import com.yahoo.config.provision.DockerImage;
import com.yahoo.vespa.hosted.dockerapi.metrics.Metrics;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
@@ -75,7 +75,7 @@ public class DockerImplTest {
@Test
@SuppressWarnings({"unchecked", "rawtypes"})
public void pullImageAsyncIfNeededSuccessfully() {
- final ContainerImage image = ContainerImage.fromString("test:1.2.3");
+ final DockerImage image = DockerImage.fromString("test:1.2.3");
InspectImageResponse inspectImageResponse = mock(InspectImageResponse.class);
when(inspectImageResponse.getId()).thenReturn(image.asString());
@@ -104,7 +104,7 @@ public class DockerImplTest {
@Test
@SuppressWarnings({"unchecked", "rawtypes"})
public void pullImageAsyncIfNeededWithError() {
- final ContainerImage image = ContainerImage.fromString("test:1.2.3");
+ final DockerImage image = DockerImage.fromString("test:1.2.3");
InspectImageCmd imageInspectCmd = mock(InspectImageCmd.class);
when(imageInspectCmd.exec()).thenThrow(new NotFoundException("Image not found"));