diff options
Diffstat (limited to 'docker-api')
6 files changed, 29 insertions, 68 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 e0c19a66111..94e827b8a49 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 @@ -2,7 +2,6 @@ package com.yahoo.vespa.hosted.dockerapi; import java.util.Objects; -import java.util.Optional; /** * @author stiankri @@ -11,26 +10,22 @@ public class Container { public final String hostname; public final DockerImage image; public final ContainerName name; - public final boolean isRunning; - public final Optional<Integer> pid; + public final State state; + public final int pid; public Container( final String hostname, final DockerImage image, final ContainerName containerName, - final boolean isRunning, - final Optional<Integer> pid) { + final State state, + final int pid) { this.hostname = hostname; this.image = image; this.name = containerName; - this.isRunning = isRunning; + this.state = state; this.pid = pid; } - public Container(String hostname, DockerImage image, ContainerName name, boolean isRunning) { - this(hostname, image, name, isRunning, Optional.empty()); - } - @Override public boolean equals(final Object obj) { if (!(obj instanceof Container)) { @@ -40,13 +35,12 @@ public class Container { return Objects.equals(hostname, other.hostname) && Objects.equals(image, other.image) && Objects.equals(name, other.name) - && Objects.equals(isRunning, other.isRunning) && Objects.equals(pid, other.pid); } @Override public int hashCode() { - return Objects.hash(hostname, image, name, isRunning, pid); + return Objects.hash(hostname, image, name, pid); } @Override @@ -55,8 +49,16 @@ public class Container { + " hostname=" + hostname + " image=" + image + " name=" + name - + " isRunning=" + isRunning + + " state=" + state + " pid=" + pid + "}"; } + + public enum State { + CREATED, RESTARTING, RUNNING, PAUSED, EXITED, DEAD; + + public boolean isRunning() { + return this == RUNNING; + } + } } diff --git a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/ContainerInfoImpl.java b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/ContainerInfoImpl.java deleted file mode 100644 index 29a0fb9fffc..00000000000 --- a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/ContainerInfoImpl.java +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2016 Yahoo Inc. 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.command.InspectContainerResponse; - -import java.util.Optional; - -class ContainerInfoImpl implements Docker.ContainerInfo { - - private final ContainerName containerName; - private final InspectContainerResponse inspectContainerResponse; - - ContainerInfoImpl(ContainerName containerName, InspectContainerResponse inspectContainerResponse) { - this.containerName = containerName; - this.inspectContainerResponse = inspectContainerResponse; - } - - @Override - public Optional<Integer> getPid() { - InspectContainerResponse.ContainerState state = inspectContainerResponse.getState(); - if (state.getRunning()) { - Integer containerPid = state.getPid(); - if (containerPid == null) { - throw new RuntimeException("PID of running container " + containerName + " is null"); - } - - return Optional.of(containerPid); - } - - return Optional.empty(); - } -} 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 daa096897a2..663bb58cacc 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 @@ -34,15 +34,6 @@ public interface Docker { ContainerName containerName, String hostName); - - interface ContainerInfo { - /** returns Optional.empty() if not running. */ - Optional<Integer> getPid(); - } - - Optional<ContainerInfo> inspectContainer(ContainerName containerName); - - interface ContainerStats { Map<String, Object> getNetworks(); Map<String, Object> getCpuStats(); 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 f56e8270e09..fd4551d0f02 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 @@ -276,12 +276,6 @@ public class DockerImpl implements Docker { } @Override - public Optional<ContainerInfo> inspectContainer(ContainerName containerName) { - return inspectContainerCmd(containerName.asString()) - .map(response -> new ContainerInfoImpl(containerName, response)); - } - - @Override public Optional<ContainerStats> getContainerStats(ContainerName containerName) { try { DockerStatsCallback statsCallback = dockerClient.statsCmd(containerName.asString()).exec(new DockerStatsCallback()); @@ -369,8 +363,8 @@ public class DockerImpl implements Docker { response.getConfig().getHostName(), new DockerImage(response.getConfig().getImage()), new ContainerName(decode(response.getName())), - response.getState().getRunning(), - Optional.ofNullable(response.getState().getPid()) + Container.State.valueOf(response.getState().getStatus().toUpperCase()), + response.getState().getPid() )) .map(Stream::of) .orElse(Stream.empty()); @@ -379,7 +373,6 @@ public class DockerImpl implements Docker { private boolean isManagedBy(final com.github.dockerjava.api.model.Container container, String manager) { final Map<String, String> labels = container.getLabels(); return labels != null && manager.equals(labels.get(LABEL_NAME_MANAGEDBY)); - } private String decode(String encodedContainerName) { diff --git a/docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/DockerTest.java b/docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/DockerTest.java index cf24fb7c826..2aac1cff676 100644 --- a/docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/DockerTest.java +++ b/docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/DockerTest.java @@ -13,6 +13,7 @@ import java.util.Optional; import java.util.concurrent.ExecutionException; import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; @@ -92,17 +93,23 @@ public class DockerTest { docker.createContainerCommand(dockerImage, containerName, containerHostname).withManagedBy(MANAGER_NAME).create(); Optional<Container> container = docker.getContainer(containerHostname); assertTrue(container.isPresent()); - assertFalse(container.get().isRunning); + assertEquals(container.get().state, Container.State.CREATED); docker.startContainer(containerName); container = docker.getContainer(containerHostname); assertTrue(container.isPresent()); - assertTrue(container.get().isRunning); + assertEquals(container.get().state, Container.State.RUNNING); + docker.dockerClient.pauseContainerCmd(containerName.asString()).exec(); + container = docker.getContainer(containerHostname); + assertTrue(container.isPresent()); + assertEquals(container.get().state, Container.State.PAUSED); + + docker.dockerClient.unpauseContainerCmd(containerName.asString()).exec(); docker.stopContainer(containerName); container = docker.getContainer(containerHostname); assertTrue(container.isPresent()); - assertFalse(container.get().isRunning); + assertEquals(container.get().state, Container.State.EXITED); docker.deleteContainer(containerName); assertThat(docker.getAllContainersManagedBy(MANAGER_NAME).isEmpty(), is(true)); @@ -151,7 +158,7 @@ public class DockerTest { // Clean up any non deleted containers from previous tests docker.getAllContainersManagedBy(MANAGER_NAME).forEach(container -> { - if (container.isRunning) docker.stopContainer(container.name); + if (container.state.isRunning()) docker.stopContainer(container.name); docker.deleteContainer(container.name); }); } diff --git a/docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/RunSystemTests.java b/docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/RunSystemTests.java index f799acd33aa..51928b232a5 100644 --- a/docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/RunSystemTests.java +++ b/docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/RunSystemTests.java @@ -137,7 +137,7 @@ public class RunSystemTests { Optional<Container> container = docker.getContainer(containerName.asString()); if (container.isPresent()) { - if (container.get().isRunning) return; + if (container.get().state.isRunning()) return; else docker.deleteContainer(containerName); } |