diff options
5 files changed, 24 insertions, 6 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 6468e14fc64..daa096897a2 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 @@ -66,6 +66,8 @@ public interface Docker { Optional<Container> getContainer(String hostname); + Optional<Container> getContainer(ContainerName containerName); + CompletableFuture<DockerImage> pullImageAsync(DockerImage image); boolean imageIsDownloaded(DockerImage image); 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 11ba5f42c52..f56e8270e09 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 @@ -354,6 +354,14 @@ public class DockerImpl implements Docker { .findFirst(); } + @Override + public Optional<Container> getContainer(ContainerName containerName) { + return listAllContainers().stream() + .flatMap(this::asContainer) + .filter(c -> Objects.equals(containerName, c.name)) + .findFirst(); + } + private Stream<Container> asContainer(com.github.dockerjava.api.model.Container dockerClientContainer) { return inspectContainerCmd(dockerClientContainer.getId()) .map(response -> 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 f6cfbe938c0..4c663581ef9 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 @@ -281,9 +281,10 @@ public class DockerOperationsImpl implements DockerOperations { @Override public void executeCommandInNetworkNamespace(ContainerName containerName, String[] command) { final PrefixLogger logger = PrefixLogger.getNodeAgentLogger(DockerOperationsImpl.class, containerName); - final Integer containerPid = getContainer(containerName.asString()) + final Integer containerPid = docker.getContainer(containerName) .flatMap(container -> container.pid) - .orElseThrow(() -> new RuntimeException("PID not found for container: " + containerName.asString())); + .orElseThrow(() -> new RuntimeException("PID not found for container with name: " + + containerName.asString())); final List<String> wrappedCommand = new LinkedList<>(); wrappedCommand.add("sudo"); diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImplTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImplTest.java index 507fd218ba7..9ab24f667d1 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImplTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImplTest.java @@ -123,10 +123,10 @@ public class DockerOperationsImplTest { "-nvL"), capturedArgs); } - private Container makeContainer(String hostname, int pid) { - final Container container = new Container(hostname, new DockerImage("mock"), - new ContainerName(hostname), true, Optional.of(pid)); - when(dockerOperations.getContainer(eq(hostname))).thenReturn(Optional.of(container)); + private Container makeContainer(String name, int pid) { + final Container container = new Container(name + ".fqdn", new DockerImage("mock"), + new ContainerName(name), true, Optional.of(pid)); + when(docker.getContainer(eq(container.name))).thenReturn(Optional.of(container)); return container; } } 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 2be286eca7b..bdc336d92ca 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 @@ -109,6 +109,13 @@ public class DockerMock implements Docker { } @Override + public Optional<Container> getContainer(ContainerName containerName) { + synchronized (monitor) { + return containers.stream().filter(container -> container.name.equals(containerName)).findFirst(); + } + } + + @Override public CompletableFuture<DockerImage> pullImageAsync(DockerImage image) { synchronized (monitor) { callOrderVerifier.add("pullImageAsync with " + image); |