summaryrefslogtreecommitdiffstats
path: root/docker-api
diff options
context:
space:
mode:
Diffstat (limited to 'docker-api')
-rw-r--r--docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/Container.java28
-rw-r--r--docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/ContainerInfoImpl.java32
-rw-r--r--docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/Docker.java9
-rw-r--r--docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImpl.java11
-rw-r--r--docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/DockerTest.java15
-rw-r--r--docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/RunSystemTests.java2
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);
}