diff options
10 files changed, 56 insertions, 20 deletions
diff --git a/flags/src/main/java/com/yahoo/vespa/flags/BooleanFlag.java b/flags/src/main/java/com/yahoo/vespa/flags/BooleanFlag.java index 1245aca65b8..0a4b8a1c5c2 100644 --- a/flags/src/main/java/com/yahoo/vespa/flags/BooleanFlag.java +++ b/flags/src/main/java/com/yahoo/vespa/flags/BooleanFlag.java @@ -12,6 +12,11 @@ public class BooleanFlag extends FlagImpl<Boolean, BooleanFlag> { super(id, defaultValue, vector, serializer, source, BooleanFlag::new); } + @Override + public BooleanFlag self() { + return this; + } + public boolean value() { return boxedValue(); } diff --git a/flags/src/main/java/com/yahoo/vespa/flags/DoubleFlag.java b/flags/src/main/java/com/yahoo/vespa/flags/DoubleFlag.java index 8c3974727c6..9d606887715 100644 --- a/flags/src/main/java/com/yahoo/vespa/flags/DoubleFlag.java +++ b/flags/src/main/java/com/yahoo/vespa/flags/DoubleFlag.java @@ -12,6 +12,11 @@ public class DoubleFlag extends FlagImpl<Double, DoubleFlag> { super(id, defaultValue, vector, serializer, source, DoubleFlag::new); } + @Override + public DoubleFlag self() { + return this; + } + public double value() { return boxedValue(); } diff --git a/flags/src/main/java/com/yahoo/vespa/flags/Flag.java b/flags/src/main/java/com/yahoo/vespa/flags/Flag.java index 7bf491a39c7..718478ab426 100644 --- a/flags/src/main/java/com/yahoo/vespa/flags/Flag.java +++ b/flags/src/main/java/com/yahoo/vespa/flags/Flag.java @@ -1,6 +1,8 @@ // Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.flags; +import java.util.Optional; + /** * Interface for flag. * @@ -12,12 +14,20 @@ public interface Flag<T, F> { /** The flag ID. */ FlagId id(); + /** A generic type-safe method for getting {@code this}. */ + F self(); + /** Returns the flag serializer. */ FlagSerializer<T> serializer(); /** Returns an immutable clone of the current object, except with the dimension set accordingly. */ F with(FetchVector.Dimension dimension, String dimensionValue); + /** Same as {@link #with(FetchVector.Dimension, String)} if value is present, and otherwise returns {@code this}. */ + default F with(FetchVector.Dimension dimension, Optional<String> dimensionValue) { + return dimensionValue.map(value -> with(dimension, value)).orElse(self()); + } + /** Returns the value, boxed if the flag wraps a primitive type. */ T boxedValue(); } diff --git a/flags/src/main/java/com/yahoo/vespa/flags/Flags.java b/flags/src/main/java/com/yahoo/vespa/flags/Flags.java index 4576b546d2e..d4c62eb079d 100644 --- a/flags/src/main/java/com/yahoo/vespa/flags/Flags.java +++ b/flags/src/main/java/com/yahoo/vespa/flags/Flags.java @@ -13,6 +13,7 @@ import java.util.Optional; import java.util.TreeMap; 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.HOSTNAME; import static com.yahoo.vespa.flags.FetchVector.Dimension.NODE_TYPE; @@ -245,7 +246,7 @@ public class Flags { List.of("hmusum"), "2021-03-15", "2021-05-15", "JVM max heap size for config proxy in Mb", "Takes effect on restart of Docker container", - CLUSTER_TYPE); + CLUSTER_TYPE, CLUSTER_ID); public static final UnboundStringFlag DEDICATED_CLUSTER_CONTROLLER_FLAVOR = defineStringFlag( "dedicated-cluster-controller-flavor", "", List.of("jonmv"), "2021-02-25", "2021-04-25", diff --git a/flags/src/main/java/com/yahoo/vespa/flags/IntFlag.java b/flags/src/main/java/com/yahoo/vespa/flags/IntFlag.java index 4a59c34e8d0..94a6e9b6e15 100644 --- a/flags/src/main/java/com/yahoo/vespa/flags/IntFlag.java +++ b/flags/src/main/java/com/yahoo/vespa/flags/IntFlag.java @@ -12,6 +12,11 @@ public class IntFlag extends FlagImpl<Integer, IntFlag> { super(id, defaultValue, vector, serializer, source, IntFlag::new); } + @Override + public IntFlag self() { + return this; + } + public int value() { return boxedValue(); } diff --git a/flags/src/main/java/com/yahoo/vespa/flags/JacksonFlag.java b/flags/src/main/java/com/yahoo/vespa/flags/JacksonFlag.java index e4afbd231a1..007110f077d 100644 --- a/flags/src/main/java/com/yahoo/vespa/flags/JacksonFlag.java +++ b/flags/src/main/java/com/yahoo/vespa/flags/JacksonFlag.java @@ -12,6 +12,11 @@ public class JacksonFlag<T> extends FlagImpl<T, JacksonFlag<T>> { super(id, defaultValue, vector, serializer, source, JacksonFlag::new); } + @Override + public JacksonFlag<T> self() { + return this; + } + public T value() { return boxedValue(); } diff --git a/flags/src/main/java/com/yahoo/vespa/flags/ListFlag.java b/flags/src/main/java/com/yahoo/vespa/flags/ListFlag.java index 6fefc5e22e3..4c7e9683833 100644 --- a/flags/src/main/java/com/yahoo/vespa/flags/ListFlag.java +++ b/flags/src/main/java/com/yahoo/vespa/flags/ListFlag.java @@ -13,6 +13,11 @@ public class ListFlag<T> extends FlagImpl<List<T>, ListFlag<T>> { super(id, defaultValue, vector, serializer, source, ListFlag::new); } + @Override + public ListFlag<T> self() { + return this; + } + public List<T> value() { return boxedValue(); } diff --git a/flags/src/main/java/com/yahoo/vespa/flags/LongFlag.java b/flags/src/main/java/com/yahoo/vespa/flags/LongFlag.java index 8a1707c9e6a..1242d05c290 100644 --- a/flags/src/main/java/com/yahoo/vespa/flags/LongFlag.java +++ b/flags/src/main/java/com/yahoo/vespa/flags/LongFlag.java @@ -12,6 +12,11 @@ public class LongFlag extends FlagImpl<Long, LongFlag> { super(id, defaultValue, vector, serializer, source, LongFlag::new); } + @Override + public LongFlag self() { + return this; + } + public long value() { return boxedValue(); } diff --git a/flags/src/main/java/com/yahoo/vespa/flags/StringFlag.java b/flags/src/main/java/com/yahoo/vespa/flags/StringFlag.java index 925af130b95..33391f43d80 100644 --- a/flags/src/main/java/com/yahoo/vespa/flags/StringFlag.java +++ b/flags/src/main/java/com/yahoo/vespa/flags/StringFlag.java @@ -12,6 +12,11 @@ public class StringFlag extends FlagImpl<String, StringFlag> { super(id, defaultValue, vector, serializer, source, StringFlag::new); } + @Override + public StringFlag self() { + return this; + } + public String value() { return boxedValue(); } 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 ae4841f4713..e335e66c1c1 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 @@ -1,6 +1,7 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.node.admin.nodeagent; +import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.DockerImage; import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.NodeType; @@ -379,25 +380,14 @@ public class NodeAgentImpl implements NodeAgent { } private ContainerResources getContainerResources(NodeAgentContext context) { - 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(); - } + double cpuCap = noCpuCap(context.zone()) ? + 0 : + context.vcpuOnThisHost() * containerCpuCap + .with(FetchVector.Dimension.APPLICATION_ID, context.node().owner().map(ApplicationId::serializedForm)) + .with(FetchVector.Dimension.CLUSTER_ID, context.node().membership().map(NodeMembership::clusterId)) + .with(FetchVector.Dimension.CLUSTER_TYPE, context.node().membership().map(membership -> membership.type().value())) + .with(FetchVector.Dimension.HOSTNAME, context.node().hostname()) + .value(); return ContainerResources.from(cpuCap, context.vcpuOnThisHost(), context.node().memoryGb()); } |