From d0586ad37ac7c87279ba26fb5756bb588952b985 Mon Sep 17 00:00:00 2001 From: Jon Bratseth Date: Wed, 6 Nov 2019 10:30:58 +0100 Subject: Keep minCpuCores without speed adjustment --- .../java/com/yahoo/config/provision/Flavor.java | 32 ++++++++++++++-------- .../yahoo/config/provision/NodeFlavorsTest.java | 9 +++++- 2 files changed, 29 insertions(+), 12 deletions(-) (limited to 'config-provisioning/src') diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/Flavor.java b/config-provisioning/src/main/java/com/yahoo/config/provision/Flavor.java index 9e6e2c3bb67..0a292e9c948 100644 --- a/config-provisioning/src/main/java/com/yahoo/config/provision/Flavor.java +++ b/config-provisioning/src/main/java/com/yahoo/config/provision/Flavor.java @@ -24,6 +24,8 @@ public class Flavor { /** The hardware resources of this flavor */ private final NodeResources resources; + private final double minCpuCores; + private final Optional flavorOverrides; private static final double coreSpeedupRolloutFactor = 1.0/3.0; // TODO: Increase to 2/3 (then 1) on later releases @@ -40,34 +42,41 @@ public class Flavor { Optional.empty(), Type.valueOf(flavorConfig.environment()), true, - flavorConfig.cost()); + flavorConfig.cost(), + flavorConfig.minCpuCores()); } /** Creates a *node* flavor from a node resources spec */ public Flavor(NodeResources resources) { - this(resources.toString(), resources, Optional.empty(), Type.DOCKER_CONTAINER, false, 0); + this(resources.toString(), resources, Optional.empty(), Type.DOCKER_CONTAINER, false, 0, resources.vcpu()); } - private Flavor(String name, NodeResources resources, Optional flavorOverrides, Type type, boolean configured, int cost) { + private Flavor(String name, + NodeResources resources, + Optional flavorOverrides, + Type type, + boolean configured, + int cost, + double minCpuCores) { this.name = Objects.requireNonNull(name, "Name cannot be null"); this.resources = Objects.requireNonNull(resources, "Resources cannot be null"); this.flavorOverrides = Objects.requireNonNull(flavorOverrides, "Flavor overrides cannot be null"); this.type = Objects.requireNonNull(type, "Type cannot be null"); this.configured = configured; this.cost = cost; + this.minCpuCores = minCpuCores; } public Flavor with(FlavorOverrides flavorOverrides) { if (!configured) throw new IllegalArgumentException("Cannot override non-configured flavor"); - NodeResources newResources = new NodeResources( - resources.vcpu(), - resources.memoryGb(), - flavorOverrides.diskGb().orElseGet(resources::diskGb), - resources.bandwidthGbps(), - resources.diskSpeed()); - return new Flavor(name, newResources, Optional.of(flavorOverrides), type, true, cost); + NodeResources newResources = new NodeResources(resources.vcpu(), + resources.memoryGb(), + flavorOverrides.diskGb().orElseGet(resources::diskGb), + resources.bandwidthGbps(), + resources.diskSpeed()); + return new Flavor(name, newResources, Optional.of(flavorOverrides), type, true, cost, minCpuCores); } public Flavor with(NodeResources resources) { @@ -111,7 +120,8 @@ public class Flavor { public double getBandwidthGbps() { return resources.bandwidthGbps(); } - public double getMinCpuCores() { return resources.vcpu(); } + /** Returns the number of cores available in this flavor, not scaled for speed. */ + public double getMinCpuCores() { return minCpuCores; } public Type getType() { return type; } diff --git a/config-provisioning/src/test/java/com/yahoo/config/provision/NodeFlavorsTest.java b/config-provisioning/src/test/java/com/yahoo/config/provision/NodeFlavorsTest.java index ec3f73a8194..920455222bb 100644 --- a/config-provisioning/src/test/java/com/yahoo/config/provision/NodeFlavorsTest.java +++ b/config-provisioning/src/test/java/com/yahoo/config/provision/NodeFlavorsTest.java @@ -11,6 +11,8 @@ import static org.junit.Assert.assertEquals; public class NodeFlavorsTest { + private static final double delta = 0.00001; + @Test public void testConfigParsing() { FlavorsConfig.Builder builder = new FlavorsConfig.Builder(); @@ -22,13 +24,18 @@ public class NodeFlavorsTest { } { FlavorsConfig.Flavor.Builder flavorBuilder = new FlavorsConfig.Flavor.Builder(); + flavorBuilder.minCpuCores(10); + flavorBuilder.cpuCoreSpeedup(1.3); flavorBuilder.name("banana").cost(3); flavorBuilderList.add(flavorBuilder); } builder.flavor(flavorBuilderList); FlavorsConfig config = new FlavorsConfig(builder); NodeFlavors nodeFlavors = new NodeFlavors(config); - assertEquals(3, nodeFlavors.getFlavor("banana").get().cost()); + Flavor banana = nodeFlavors.getFlavor("banana").get(); + assertEquals(3, banana.cost()); + assertEquals(10, banana.getMinCpuCores(), delta); + assertEquals("10 * (1 + (1.3 - 1)/3", 11, banana.resources().vcpu(), delta); } } -- cgit v1.2.3