diff options
author | Håkon Hallingstad <hakon@verizonmedia.com> | 2021-02-05 01:12:07 +0100 |
---|---|---|
committer | Håkon Hallingstad <hakon@verizonmedia.com> | 2021-02-05 01:12:07 +0100 |
commit | 21bca780a46f545966d5322cfe19c4c455468d42 (patch) | |
tree | c3383406820ac70d9a03a3130bf1295e5641801b /docker-api | |
parent | cf73d91645b70eb1a78cbe44f6be31d3ed5979b5 (diff) |
Generalize updating of CPU limits
Diffstat (limited to 'docker-api')
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()), |