summaryrefslogtreecommitdiffstats
path: root/docker-api
diff options
context:
space:
mode:
authorHÃ¥kon Hallingstad <hakon.hallingstad@gmail.com>2021-02-05 11:28:12 +0100
committerGitHub <noreply@github.com>2021-02-05 11:28:12 +0100
commitd7efba59bc6c8fa61b7821123b035b1ffef5d529 (patch)
tree0b429d8327054810194869e1b149d77104471848 /docker-api
parent4bcef4ebd8133c5be2bb6062a4ae76bfec565dea (diff)
Revert "Revert "Generalize updating of CPU limits" [MERGEOK]"
Diffstat (limited to 'docker-api')
-rw-r--r--docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/Container.java11
-rw-r--r--docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/ContainerId.java36
-rw-r--r--docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/ContainerResources.java3
-rw-r--r--docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerEngine.java1
4 files changed, 48 insertions, 3 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 fb979ff639c..9e304e5ef4d 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
@@ -10,6 +10,7 @@ import java.util.Objects;
*/
// TODO: Move this to node-admin when docker-api module can be removed
public class Container {
+ private final ContainerId id;
public final String hostname;
public final DockerImage image;
public final ContainerResources resources;
@@ -18,12 +19,14 @@ public class Container {
public final int pid;
public Container(
+ final ContainerId id,
final String hostname,
final DockerImage image,
final ContainerResources resources,
final ContainerName containerName,
final State state,
final int pid) {
+ this.id = id;
this.hostname = hostname;
this.image = image;
this.resources = resources;
@@ -32,13 +35,18 @@ public class Container {
this.pid = pid;
}
+ public ContainerId id() {
+ return id;
+ }
+
@Override
public boolean equals(final Object obj) {
if (!(obj instanceof Container)) {
return false;
}
final Container other = (Container) obj;
- return Objects.equals(hostname, other.hostname)
+ return Objects.equals(id, other.id)
+ && Objects.equals(hostname, other.hostname)
&& Objects.equals(image, other.image)
&& Objects.equals(resources, other.resources)
&& Objects.equals(name, other.name)
@@ -53,6 +61,7 @@ public class Container {
@Override
public String toString() {
return "Container {"
+ + " id=" + id
+ " hostname=" + hostname
+ " image=" + image
+ " resources=" + resources
diff --git a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/ContainerId.java b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/ContainerId.java
new file mode 100644
index 00000000000..b86238324f0
--- /dev/null
+++ b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/ContainerId.java
@@ -0,0 +1,36 @@
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+//
+package com.yahoo.vespa.hosted.dockerapi;
+
+import java.util.Objects;
+
+/**
+ * The ID of a container.
+ *
+ * @author hakon
+ */
+public class ContainerId {
+ private final String id;
+
+ public ContainerId(String id) {
+ this.id = Objects.requireNonNull(id, "id cannot be null");
+ }
+
+ @Override
+ public String toString() {
+ return id;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ ContainerId that = (ContainerId) o;
+ return id.equals(that.id);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(id);
+ }
+}
diff --git a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/ContainerResources.java b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/ContainerResources.java
index c61bc3ed919..37e265bf411 100644
--- a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/ContainerResources.java
+++ b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/ContainerResources.java
@@ -63,8 +63,7 @@ public class ContainerResources {
return cpus;
}
- // Although docker allows to update cpu quota to 0, this is not a legal value, must be set -1 for unlimited
- // See: https://github.com/docker/for-linux/issues/558
+ /** Returns the CFS CPU quota per {@link #cpuPeriod()}, or -1 if disabled. */
public int cpuQuota() {
return cpus > 0 ? (int) (cpus * CPU_PERIOD_US) : -1;
}
diff --git a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerEngine.java b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerEngine.java
index 630efb7990f..3b7b2b8d54c 100644
--- a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerEngine.java
+++ b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerEngine.java
@@ -286,6 +286,7 @@ public class DockerEngine implements ContainerEngine {
private Stream<Container> asContainer(String container) {
return inspectContainerCmd(container)
.map(response -> new Container(
+ new ContainerId(response.getId()),
response.getConfig().getHostName(),
DockerImage.fromString(response.getConfig().getImage()),
containerResourcesFromHostConfig(response.getHostConfig()),