diff options
author | Håkon Hallingstad <hakon@verizonmedia.com> | 2021-04-01 12:11:45 +0200 |
---|---|---|
committer | Håkon Hallingstad <hakon@verizonmedia.com> | 2021-04-01 12:11:45 +0200 |
commit | 9637c5f0de67dfe6fa54489177f9e6cda47f4165 (patch) | |
tree | 954a5e3e99f475d0b03e8415db7623a76be88f62 | |
parent | 1e5e5325e02f79a9875b83fb1e8edd9919844f3a (diff) |
Resolve container-cpu-cap based on cluster type and ID
4 files changed, 28 insertions, 10 deletions
diff --git a/flags/src/main/java/com/yahoo/vespa/flags/FetchVector.java b/flags/src/main/java/com/yahoo/vespa/flags/FetchVector.java index 37849b65adf..ede7bd6a109 100644 --- a/flags/src/main/java/com/yahoo/vespa/flags/FetchVector.java +++ b/flags/src/main/java/com/yahoo/vespa/flags/FetchVector.java @@ -33,9 +33,12 @@ public class FetchVector { /** Node type from com.yahoo.config.provision.NodeType::name, e.g. tenant, host, confighost, controller, etc. */ NODE_TYPE, - /** Cluster type from com.yahoo.config.provision.ClusterSpec.Type::name, e.g. content, container, admin */ + /** Cluster type from com.yahoo.config.provision.ClusterSpec.Type::value, e.g. content, container, admin */ CLUSTER_TYPE, + /** Cluster ID from com.yahoo.config.provision.ClusterSpec.Id::value, e.g. cluster-controllers, logserver. */ + CLUSTER_ID, + /** * Fully qualified hostname. * diff --git a/flags/src/main/java/com/yahoo/vespa/flags/PermanentFlags.java b/flags/src/main/java/com/yahoo/vespa/flags/PermanentFlags.java index 7099124024b..251d8f67126 100644 --- a/flags/src/main/java/com/yahoo/vespa/flags/PermanentFlags.java +++ b/flags/src/main/java/com/yahoo/vespa/flags/PermanentFlags.java @@ -11,6 +11,8 @@ import java.time.format.DateTimeFormatter; import java.util.List; import static com.yahoo.vespa.flags.FetchVector.Dimension.APPLICATION_ID; +import static com.yahoo.vespa.flags.FetchVector.Dimension.CLUSTER_ID; +import static com.yahoo.vespa.flags.FetchVector.Dimension.CLUSTER_TYPE; import static com.yahoo.vespa.flags.FetchVector.Dimension.CONSOLE_USER_EMAIL; import static com.yahoo.vespa.flags.FetchVector.Dimension.HOSTNAME; import static com.yahoo.vespa.flags.FetchVector.Dimension.NODE_TYPE; @@ -102,9 +104,9 @@ public class PermanentFlags { public static final UnboundDoubleFlag CONTAINER_CPU_CAP = defineDoubleFlag( "container-cpu-cap", 0, "Hard limit on how many CPUs a container may use. This value is multiplied by CPU allocated to node, so " + - "to cap CPU at 200%, set this to 2, etc.", + "to cap CPU at 200%, set this to 2, etc. 0 disables the cap to allow unlimited CPU.", "Takes effect on next node agent tick. Change is orchestrated, but does NOT require container restart", - HOSTNAME, APPLICATION_ID); + HOSTNAME, APPLICATION_ID, CLUSTER_ID, CLUSTER_TYPE); public static final UnboundListFlag<String> DISABLED_HOST_ADMIN_TASKS = defineListFlag( "disabled-host-admin-tasks", List.of(), String.class, diff --git a/flags/src/main/java/com/yahoo/vespa/flags/json/DimensionHelper.java b/flags/src/main/java/com/yahoo/vespa/flags/json/DimensionHelper.java index f109d3c950b..b18c0c43bbc 100644 --- a/flags/src/main/java/com/yahoo/vespa/flags/json/DimensionHelper.java +++ b/flags/src/main/java/com/yahoo/vespa/flags/json/DimensionHelper.java @@ -17,6 +17,7 @@ public class DimensionHelper { serializedDimensions.put(FetchVector.Dimension.HOSTNAME, "hostname"); serializedDimensions.put(FetchVector.Dimension.APPLICATION_ID, "application"); serializedDimensions.put(FetchVector.Dimension.NODE_TYPE, "node-type"); + serializedDimensions.put(FetchVector.Dimension.CLUSTER_ID, "cluster-id"); serializedDimensions.put(FetchVector.Dimension.CLUSTER_TYPE, "cluster-type"); serializedDimensions.put(FetchVector.Dimension.VESPA_VERSION, "vespa-version"); serializedDimensions.put(FetchVector.Dimension.CONSOLE_USER_EMAIL, "console-user-email"); diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java index f401b614637..ae4841f4713 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java @@ -379,13 +379,25 @@ public class NodeAgentImpl implements NodeAgent { } private ContainerResources getContainerResources(NodeAgentContext context) { - double cpuCap = noCpuCap(context.zone()) ? - 0 : - context.node().owner() - .map(appId -> containerCpuCap.with(FetchVector.Dimension.APPLICATION_ID, appId.serializedForm())) - .orElse(containerCpuCap) - .with(FetchVector.Dimension.HOSTNAME, context.node().hostname()) - .value() * context.vcpuOnThisHost(); + final double cpuCap; + if (noCpuCap(context.zone())) { + cpuCap = 0.0; + } else { + DoubleFlag containerCpuCapFlag = containerCpuCap.with(FetchVector.Dimension.HOSTNAME, context.node().hostname());; + + if (context.node().owner().isPresent()) { + containerCpuCapFlag = containerCpuCapFlag.with(FetchVector.Dimension.APPLICATION_ID, + context.node().owner().get().serializedForm()); + } + + if (context.node().membership().isPresent()) { + containerCpuCapFlag = containerCpuCapFlag + .with(FetchVector.Dimension.CLUSTER_TYPE, context.node().membership().get().type().value()) + .with(FetchVector.Dimension.CLUSTER_ID, context.node().membership().get().clusterId()); + } + + cpuCap = context.vcpuOnThisHost() * containerCpuCapFlag.value(); + } return ContainerResources.from(cpuCap, context.vcpuOnThisHost(), context.node().memoryGb()); } |