diff options
author | Håkon Hallingstad <hakon@verizonmedia.com> | 2020-09-08 09:00:56 +0200 |
---|---|---|
committer | Håkon Hallingstad <hakon@verizonmedia.com> | 2020-09-08 09:00:56 +0200 |
commit | 92494ee6cb4b373c0a3ddf44997dc2a1ec35ef0d (patch) | |
tree | 79c7d6b106a66e1338edea956a15bd1ed6310030 /docker-api/src | |
parent | e858dfe2815e6ffda326f69f1a62bcb0f4c2c3db (diff) |
Avoid renaming DockerImage which is used in the config model
Diffstat (limited to 'docker-api/src')
-rw-r--r-- | docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/Container.java | 6 | ||||
-rw-r--r-- | docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/ContainerEngine.java | 10 | ||||
-rw-r--r-- | docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/CreateContainerCommandImpl.java | 12 | ||||
-rw-r--r-- | docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImageGarbageCollector.java | 16 | ||||
-rw-r--r-- | docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImpl.java | 48 | ||||
-rw-r--r-- | docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/CreateContainerCommandImplTest.java | 6 | ||||
-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.java | 6 |
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")); |