From d7efba59bc6c8fa61b7821123b035b1ffef5d529 Mon Sep 17 00:00:00 2001 From: HÃ¥kon Hallingstad Date: Fri, 5 Feb 2021 11:28:12 +0100 Subject: Revert "Revert "Generalize updating of CPU limits" [MERGEOK]" --- .../yahoo/vespa/hosted/dockerapi/Container.java | 11 ++++++- .../yahoo/vespa/hosted/dockerapi/ContainerId.java | 36 ++++++++++++++++++++++ .../vespa/hosted/dockerapi/ContainerResources.java | 3 +- .../yahoo/vespa/hosted/dockerapi/DockerEngine.java | 1 + 4 files changed, 48 insertions(+), 3 deletions(-) create mode 100644 docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/ContainerId.java (limited to 'docker-api/src') 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 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()), -- cgit v1.2.3