aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorValerij Fredriksen <valerij92@gmail.com>2019-01-11 20:44:41 +0100
committerValerij Fredriksen <valerij92@gmail.com>2019-01-11 21:20:12 +0100
commit3fb8c960a2121922cd1a4c36de9597e7440d71fd (patch)
treee4b83300fde3860c07a82b96cf860da16d60228b
parent6d8f6b08da2addc3691d32809dfa4e880636a7d0 (diff)
Code review fixes
-rw-r--r--docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/ContainerResources.java11
-rw-r--r--docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/CreateContainerCommandImpl.java5
-rw-r--r--docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImpl.java5
-rw-r--r--flags/src/main/java/com/yahoo/vespa/flags/Flags.java3
-rw-r--r--flags/src/main/java/com/yahoo/vespa/flags/InMemoryFlagSource.java11
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java8
6 files changed, 26 insertions, 17 deletions
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 1a643eafacf..58347a1e8fd 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
@@ -8,6 +8,7 @@ import java.util.Objects;
*/
public class ContainerResources {
public static final ContainerResources UNLIMITED = ContainerResources.from(0, 0, 0);
+ private static final int CPU_PERIOD = 100_000; // 100 µs
private final double cpus;
private final int cpuShares;
@@ -37,6 +38,14 @@ public class ContainerResources {
return cpus;
}
+ public int cpuQuota() {
+ return (int) cpus * CPU_PERIOD;
+ }
+
+ public int cpuPeriod() {
+ return CPU_PERIOD;
+ }
+
public int cpuShares() {
return cpuShares;
}
@@ -50,7 +59,7 @@ public class ContainerResources {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ContainerResources that = (ContainerResources) o;
- return Double.compare(that.cpus, cpus) == 0 &&
+ return Math.abs(that.cpus - cpus) < 0.0001 &&
cpuShares == that.cpuShares &&
memoryBytes == that.memoryBytes;
}
diff --git a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/CreateContainerCommandImpl.java b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/CreateContainerCommandImpl.java
index 36b71b66158..febd3ba4d98 100644
--- a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/CreateContainerCommandImpl.java
+++ b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/CreateContainerCommandImpl.java
@@ -26,7 +26,6 @@ import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;
-import static com.yahoo.vespa.hosted.dockerapi.DockerImpl.CPU_PERIOD;
import static com.yahoo.vespa.hosted.dockerapi.DockerImpl.LABEL_NAME_MANAGEDBY;
class CreateContainerCommandImpl implements Docker.CreateContainerCommand {
@@ -163,8 +162,8 @@ class CreateContainerCommandImpl implements Docker.CreateContainerCommand {
containerResources.ifPresent(cr -> hostConfig
.withCpuShares(cr.cpuShares())
.withMemory(cr.memoryBytes())
- .withCpuPeriod(cr.cpus() > 0 ? CPU_PERIOD : null)
- .withCpuQuota(cr.cpus() > 0 ? (int) (CPU_PERIOD * cr.cpus()) : null));
+ .withCpuPeriod(cr.cpuQuota() > 0 ? cr.cpuPeriod() : null)
+ .withCpuQuota(cr.cpuQuota() > 0 ? cr.cpuQuota() : null));
final CreateContainerCmd containerCmd = docker
.createContainerCmd(dockerImage.asString())
diff --git a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImpl.java b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImpl.java
index 52824f6050c..5405e283b47 100644
--- a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImpl.java
+++ b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImpl.java
@@ -48,7 +48,6 @@ public class DockerImpl implements Docker {
private static final Logger logger = Logger.getLogger(DockerImpl.class.getName());
static final String LABEL_NAME_MANAGEDBY = "com.yahoo.vespa.managedby";
- static final int CPU_PERIOD = 100_000; // 100 µs
private static final String FRAMEWORK_CONTAINER_PREFIX = "/";
private static final Duration WAIT_BEFORE_KILLING = Duration.ofSeconds(10);
@@ -246,8 +245,8 @@ public class DockerImpl implements Docker {
// See: https://docs.docker.com/config/containers/resource_constraints/#configure-the-default-cfs-scheduler
// --cpus requires API 1.25+ on create and 1.29+ on update
// NanoCPUs is supported in docker-java as of 3.1.0 on create and not at all on update
- .withCpuPeriod(resources.cpus() > 0 ? CPU_PERIOD : null)
- .withCpuQuota(resources.cpus() > 0 ? (int) (CPU_PERIOD * resources.cpus()) : null);
+ .withCpuPeriod(resources.cpuQuota() > 0 ? resources.cpuPeriod() : null)
+ .withCpuQuota(resources.cpuQuota() > 0 ? resources.cpuQuota() : null);
updateContainerCmd.exec();
} catch (NotFoundException e) {
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 f2d96de79dc..cc4d55c0c94 100644
--- a/flags/src/main/java/com/yahoo/vespa/flags/Flags.java
+++ b/flags/src/main/java/com/yahoo/vespa/flags/Flags.java
@@ -8,6 +8,7 @@ import java.util.List;
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.HOSTNAME;
/**
@@ -41,7 +42,7 @@ public class Flags {
"use-config-server-cache", true,
"Whether config server will use cache to answer config requests.",
"Takes effect immediately when changed.",
- HOSTNAME, FetchVector.Dimension.APPLICATION_ID);
+ HOSTNAME, APPLICATION_ID);
public static final UnboundBooleanFlag CONFIG_SERVER_BOOTSTRAP_IN_SEPARATE_THREAD = defineFeatureFlag(
"config-server-bootstrap-in-separate-thread", true,
diff --git a/flags/src/main/java/com/yahoo/vespa/flags/InMemoryFlagSource.java b/flags/src/main/java/com/yahoo/vespa/flags/InMemoryFlagSource.java
index 25b871f8cd1..5e2afe39dd8 100644
--- a/flags/src/main/java/com/yahoo/vespa/flags/InMemoryFlagSource.java
+++ b/flags/src/main/java/com/yahoo/vespa/flags/InMemoryFlagSource.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 com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.DoubleNode;
import com.yahoo.vespa.flags.json.FlagData;
import com.yahoo.vespa.flags.json.Rule;
@@ -21,8 +23,13 @@ public class InMemoryFlagSource implements FlagSource {
return this;
}
- public InMemoryFlagSource withFlag(FlagId flagId, FetchVector defaultFetchVector, Rule... rules) {
- flagDataById.put(flagId, new FlagData(flagId, defaultFetchVector, rules));
+ public InMemoryFlagSource withDoubleFlag(FlagId flagId, double value) {
+ return withRawFlag(flagId, new DoubleNode(value));
+ }
+
+ private InMemoryFlagSource withRawFlag(FlagId flagId, JsonNode rawFlag) {
+ Rule rule = new Rule(Optional.of(JsonNodeRawFlag.fromJsonNode(rawFlag)));
+ flagDataById.put(flagId, new FlagData(flagId, new FetchVector(), rule));
return this;
}
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java
index 78fa53edb56..1b116b304b2 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java
@@ -4,11 +4,8 @@ package com.yahoo.vespa.hosted.node.admin.nodeagent;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yahoo.config.provision.NodeType;
import com.yahoo.metrics.simple.MetricReceiver;
-import com.yahoo.vespa.flags.FetchVector;
import com.yahoo.vespa.flags.Flags;
import com.yahoo.vespa.flags.InMemoryFlagSource;
-import com.yahoo.vespa.flags.JsonNodeRawFlag;
-import com.yahoo.vespa.flags.json.Rule;
import com.yahoo.vespa.hosted.dockerapi.Container;
import com.yahoo.vespa.hosted.dockerapi.ContainerName;
import com.yahoo.vespa.hosted.dockerapi.ContainerResources;
@@ -279,10 +276,7 @@ public class NodeAgentImplTest {
inOrder.verify(orchestrator).resume(any(String.class));
// Set the feature flag
- flagSource.withFlag(
- Flags.CONTAINER_CPU_CAP.id(),
- new FetchVector(),
- new Rule(Optional.of(JsonNodeRawFlag.fromJson("2.3"))));
+ flagSource.withDoubleFlag(Flags.CONTAINER_CPU_CAP.id(), 2.3);
nodeAgent.converge(thirdContext);
inOrder.verify(dockerOperations).updateContainer(eq(thirdContext), eq(ContainerResources.from(2.3, 4, 16)));