From a63cd52d27e689e58fff572c387350b7af55f23e Mon Sep 17 00:00:00 2001 From: Valerij Fredriksen Date: Mon, 13 Feb 2023 12:58:35 +0100 Subject: Revert "Allow less vCPU in CD" This reverts commit c59af7fd2d5cebf46800023f668545190c75661d. --- .../yahoo/vespa/hosted/provision/provisioning/NodeResourceLimits.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeResourceLimits.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeResourceLimits.java index 73e1141a823..81f5ee26999 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeResourceLimits.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeResourceLimits.java @@ -62,7 +62,7 @@ public class NodeResourceLimits { } private double minAdvertisedVcpu(ClusterSpec cluster) { - if (zone().environment().isProduction() && ! zone().system().isCd() && nodeRepository.exclusiveAllocation(cluster)) return 2; + if (zone().environment().isProduction() && nodeRepository.exclusiveAllocation(cluster)) return 2; if (zone().environment().isProduction() && cluster.type().isContent()) return 1.0; if (zone().environment() == Environment.dev && ! nodeRepository.exclusiveAllocation(cluster)) return 0.1; if (cluster.type() == ClusterSpec.Type.admin) return 0.1; -- cgit v1.2.3 From 7f03eefa168884d4ef85eb456a62a157492ee0f4 Mon Sep 17 00:00:00 2001 From: Valerij Fredriksen Date: Mon, 13 Feb 2023 12:58:43 +0100 Subject: Revert "Require 2 vCPU for exclusive hosts in prod" This reverts commit 976f02a271b07b85eac26838f05e8767537282c4. --- .../provision/provisioning/NodeResourceLimits.java | 3 +-- .../provision/autoscale/AutoscalingTest.java | 16 +++++++-------- .../provisioning/DynamicProvisioningTest.java | 24 +++++++++++----------- .../provisioning/LoadBalancerProvisionerTest.java | 5 +++-- .../provision/provisioning/ProvisioningTester.java | 2 +- .../provisioning/VirtualNodeProvisioningTest.java | 10 ++++----- 6 files changed, 30 insertions(+), 30 deletions(-) diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeResourceLimits.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeResourceLimits.java index 81f5ee26999..66895867623 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeResourceLimits.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeResourceLimits.java @@ -62,9 +62,8 @@ public class NodeResourceLimits { } private double minAdvertisedVcpu(ClusterSpec cluster) { - if (zone().environment().isProduction() && nodeRepository.exclusiveAllocation(cluster)) return 2; - if (zone().environment().isProduction() && cluster.type().isContent()) return 1.0; if (zone().environment() == Environment.dev && ! nodeRepository.exclusiveAllocation(cluster)) return 0.1; + if (cluster.type().isContent() && zone().environment().isProduction()) return 1.0; if (cluster.type() == ClusterSpec.Type.admin) return 0.1; return 0.5; } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java index a5cfc04afd4..23485690fdb 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java @@ -1,13 +1,15 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.provision.autoscale; +import com.yahoo.config.provision.IntRange; import com.yahoo.config.provision.Capacity; import com.yahoo.config.provision.ClusterResources; import com.yahoo.config.provision.ClusterSpec; import com.yahoo.config.provision.Environment; -import com.yahoo.config.provision.IntRange; import com.yahoo.config.provision.NodeResources; import com.yahoo.config.provision.NodeResources.DiskSpeed; +import static com.yahoo.config.provision.NodeResources.DiskSpeed.fast; +import static com.yahoo.config.provision.NodeResources.DiskSpeed.slow; import com.yahoo.config.provision.NodeResources.StorageType; import com.yahoo.config.provision.RegionName; import com.yahoo.config.provision.Zone; @@ -17,8 +19,6 @@ import org.junit.Test; import java.time.Duration; import java.util.Optional; -import static com.yahoo.config.provision.NodeResources.DiskSpeed.fast; -import static com.yahoo.config.provision.NodeResources.DiskSpeed.slow; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @@ -773,7 +773,7 @@ public class AutoscalingTest { @Test public void test_changing_exclusivity() { - var min = new ClusterResources( 2, 1, new NodeResources( 3, 4, 100, 1)); + var min = new ClusterResources( 2, 1, new NodeResources( 1, 4, 100, 1)); var max = new ClusterResources(20, 1, new NodeResources(100, 1000, 1000, 1)); var fixture = AutoscalingTester.fixture() .awsProdSetup(true) @@ -782,20 +782,20 @@ public class AutoscalingTest { .initialResources(Optional.empty()) .build(); fixture.tester().assertResources("Initial deployment at minimum", - 2, 1, 4, 8, 100, + 2, 1, 2, 4, 100, fixture.currentResources().advertisedResources()); fixture.tester().deploy(fixture.applicationId(), clusterSpec(false), fixture.capacity()); fixture.loader().applyLoad(new Load(0.1, 0.1, 0.1), 100); fixture.tester().assertResources("With non-exclusive nodes, a better solution is " + - "50% more nodes with less cpu and memory", - 3, 1, 3, 4, 100.0, + "50% more nodes with half the cpu", + 3, 1, 1.1, 4, 100.0, fixture.autoscale()); fixture.tester().deploy(fixture.applicationId(), clusterSpec(true), fixture.capacity()); fixture.loader().applyLoad(new Load(0.1, 0.1, 0.1), 100); fixture.tester().assertResources("Reverts to the initial resources", - 2, 1, 4, 8, 100, + 2, 1, 2, 4, 100, fixture.currentResources().advertisedResources()); } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicProvisioningTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicProvisioningTest.java index bead36c5464..66b278a52db 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicProvisioningTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicProvisioningTest.java @@ -78,7 +78,7 @@ public class DynamicProvisioningTest { // Deploy new exclusive application ApplicationId application3 = ProvisioningTester.applicationId("application3"); - NodeResources exclusiveResources = new NodeResources(2, 10, 20, 1); + NodeResources exclusiveResources = new NodeResources(1, 10, 10, 1); prepareAndActivate(application3, clusterSpec("mycluster", true), 4, 1, exclusiveResources, tester); // Total of 20 nodes should now be in node-repo, 8 active hosts and 12 active nodes @@ -92,7 +92,7 @@ public class DynamicProvisioningTest { var tester = tester(true); NodeResources initialResources = new NodeResources(4, 80, 100, 1); - NodeResources smallResources = new NodeResources(2, 20, 50, 1); + NodeResources smallResources = new NodeResources(1, 20, 50, 1); ApplicationId application1 = ProvisioningTester.applicationId(); prepareAndActivate(application1, clusterSpec("mycluster"), 4, 1, initialResources, tester); @@ -121,7 +121,7 @@ public class DynamicProvisioningTest { tester.makeReadyHosts(6, new NodeResources(12, 12, 200, 12)); tester.activateTenantHosts(); - NodeResources resources = new NodeResources(2, 4, 10, 4); + NodeResources resources = new NodeResources(1, 4, 10, 4); ApplicationId application1 = ProvisioningTester.applicationId(); prepareAndActivate(application1, clusterSpec("mycluster"), 4, 1, resources, tester); @@ -148,7 +148,7 @@ public class DynamicProvisioningTest { assertEquals(4, initialNodes.size()); // Redeploy same application with exclusive=true - NodeResources smallerExclusiveResources = new NodeResources(2, 20, 50, 1); + NodeResources smallerExclusiveResources = new NodeResources(1, 20, 50, 1); prepareAndActivate(application1, clusterSpec("mycluster", true), 4, 1, smallerExclusiveResources, tester); assertEquals(8, tester.nodeRepository().nodes().list().owner(application1).size()); assertEquals(initialNodes, tester.nodeRepository().nodes().list().owner(application1).retired()); @@ -241,8 +241,8 @@ public class DynamicProvisioningTest { @Test public void migrates_nodes_on_host_flavor_flag_change() { InMemoryFlagSource flagSource = new InMemoryFlagSource(); - List flavors = List.of(new Flavor("x86", new NodeResources(2, 4, 50, 0.1, fast, local, Architecture.x86_64)), - new Flavor("arm", new NodeResources(2, 4, 50, 0.1, fast, local, Architecture.arm64))); + List flavors = List.of(new Flavor("x86", new NodeResources(1, 4, 50, 0.1, fast, local, Architecture.x86_64)), + new Flavor("arm", new NodeResources(1, 4, 50, 0.1, fast, local, Architecture.arm64))); MockHostProvisioner hostProvisioner = new MockHostProvisioner(flavors); ProvisioningTester tester = new ProvisioningTester.Builder().zone(zone(false)) .flavors(flavors) @@ -254,7 +254,7 @@ public class DynamicProvisioningTest { ApplicationId app = ProvisioningTester.applicationId(); ClusterSpec cluster = ClusterSpec.request(ClusterSpec.Type.content, new ClusterSpec.Id("cluster1")).vespaVersion("8").build(); - Capacity capacity = Capacity.from(new ClusterResources(4, 2, new NodeResources(2, 4, 50, 0.1, DiskSpeed.any, StorageType.any, Architecture.any))); + Capacity capacity = Capacity.from(new ClusterResources(4, 2, new NodeResources(1, 4, 50, 0.1, DiskSpeed.any, StorageType.any, Architecture.any))); hostProvisioner.overrideHostFlavor("x86"); tester.activate(app, cluster, capacity); @@ -310,10 +310,10 @@ public class DynamicProvisioningTest { } // Initial deployment - tester.activate(app1, cluster1, Capacity.from(resources(4, 2, 2, 5, 20), + tester.activate(app1, cluster1, Capacity.from(resources(4, 2, 1, 5, 20), resources(6, 3, 4, 20, 40))); tester.assertNodes("Initial allocation at first actual flavor above min (except for disk)", - 4, 2, 2, 20, 20, + 4, 2, 1, 10, 20, app1, cluster1); @@ -332,7 +332,7 @@ public class DynamicProvisioningTest { app1, cluster1); // Widening window does not change allocation - tester.activate(app1, cluster1, Capacity.from(resources(2, 1, 2, 5, 15), + tester.activate(app1, cluster1, Capacity.from(resources(2, 1, 1, 5, 15), resources(8, 4, 4, 20, 30))); tester.assertNodes("No change", 6, 2, 2, 20, 25, @@ -340,8 +340,8 @@ public class DynamicProvisioningTest { // Force 1 more groups: Reducing to 2 nodes per group to preserve node count is rejected // since it will reduce total group memory from 60 to 40. - tester.activate(app1, cluster1, Capacity.from(resources(6, 3, 2, 5, 10), - resources(9, 3, 5, 20, 15))); + tester.activate(app1, cluster1, Capacity.from(resources(6, 3, 1, 5, 10), + resources(9, 3, 5, 20, 15))); tester.assertNodes("Group size is preserved", 9, 3, 2, 20, 15, app1, cluster1); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisionerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisionerTest.java index c791c7848d7..6b877ed4cea 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisionerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisionerTest.java @@ -3,13 +3,13 @@ package com.yahoo.vespa.hosted.provision.provisioning; import ai.vespa.http.DomainName; import com.google.common.collect.Iterators; +import com.yahoo.config.provision.IntRange; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.Capacity; import com.yahoo.config.provision.CloudAccount; import com.yahoo.config.provision.ClusterResources; import com.yahoo.config.provision.ClusterSpec; import com.yahoo.config.provision.HostSpec; -import com.yahoo.config.provision.IntRange; import com.yahoo.config.provision.NodeResources; import com.yahoo.config.provision.NodeType; import com.yahoo.config.provision.ZoneEndpoint; @@ -42,6 +42,7 @@ import java.util.function.Supplier; import java.util.stream.Collectors; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertThrows; @@ -56,7 +57,7 @@ public class LoadBalancerProvisionerTest { private final ApplicationId app1 = ApplicationId.from("tenant1", "application1", "default"); private final ApplicationId app2 = ApplicationId.from("tenant2", "application2", "default"); private final ApplicationId infraApp1 = ApplicationId.from("vespa", "tenant-host", "default"); - private final NodeResources nodeResources = new NodeResources(2, 4, 10, 0.3); + private final NodeResources nodeResources = new NodeResources(1, 4, 10, 0.3); private final InMemoryFlagSource flagSource = new InMemoryFlagSource(); private final ProvisioningTester tester = new ProvisioningTester.Builder().flagSource(flagSource).build(); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java index 0ab6e31b20f..5e9549aafbb 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java @@ -129,7 +129,7 @@ public class ProvisioningTester { public static FlavorsConfig createConfig() { FlavorConfigBuilder b = new FlavorConfigBuilder(); b.addFlavor("default", 2., 40., 100, 10, Flavor.Type.BARE_METAL).cost(3); - b.addFlavor("small", 2., 20., 50, 5, Flavor.Type.BARE_METAL).cost(2); + b.addFlavor("small", 1., 20., 50, 5, Flavor.Type.BARE_METAL).cost(2); b.addFlavor("dockerSmall", 1., 10., 10, 1, Flavor.Type.DOCKER_CONTAINER).cost(1); b.addFlavor("dockerLarge", 2., 10., 20, 1, Flavor.Type.DOCKER_CONTAINER).cost(3); b.addFlavor("v-4-8-100", 4., 80., 100, 10, Flavor.Type.VIRTUAL_MACHINE).cost(4); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/VirtualNodeProvisioningTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/VirtualNodeProvisioningTest.java index c1c4630f431..086df4d0c33 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/VirtualNodeProvisioningTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/VirtualNodeProvisioningTest.java @@ -364,7 +364,7 @@ public class VirtualNodeProvisioningTest { @Test public void application_deployment_with_exclusive_app_first() { NodeResources hostResources = new NodeResources(10, 40, 1000, 10); - NodeResources nodeResources = new NodeResources(2, 4, 100, 1); + NodeResources nodeResources = new NodeResources(1, 4, 100, 1); ProvisioningTester tester = new ProvisioningTester.Builder().zone(new Zone(Environment.prod, RegionName.from("us-east"))).build(); tester.makeReadyHosts(4, hostResources).activateTenantHosts(); ApplicationId application1 = ProvisioningTester.applicationId("app1"); @@ -383,7 +383,7 @@ public class VirtualNodeProvisioningTest { @Test public void application_deployment_with_exclusive_app_last() { NodeResources hostResources = new NodeResources(10, 40, 1000, 10); - NodeResources nodeResources = new NodeResources(2, 4, 100, 1); + NodeResources nodeResources = new NodeResources(1, 4, 100, 1); ProvisioningTester tester = new ProvisioningTester.Builder().zone(new Zone(Environment.prod, RegionName.from("us-east"))).build(); tester.makeReadyHosts(4, hostResources).activateTenantHosts(); ApplicationId application1 = ProvisioningTester.applicationId("app1"); @@ -402,7 +402,7 @@ public class VirtualNodeProvisioningTest { @Test public void application_deployment_change_to_exclusive_and_back() { NodeResources hostResources = new NodeResources(10, 40, 1000, 10); - NodeResources nodeResources = new NodeResources(2, 4, 100, 1); + NodeResources nodeResources = new NodeResources(1, 4, 100, 1); ProvisioningTester tester = new ProvisioningTester.Builder().zone(new Zone(Environment.prod, RegionName.from("us-east"))).build(); tester.makeReadyHosts(4, hostResources).activateTenantHosts(); @@ -429,7 +429,7 @@ public class VirtualNodeProvisioningTest { ApplicationId application2 = ApplicationId.from("tenant2", "app2", "default"); ApplicationId application3 = ApplicationId.from("tenant1", "app3", "default"); NodeResources hostResources = new NodeResources(10, 40, 1000, 10); - NodeResources nodeResources = new NodeResources(2, 4, 100, 1); + NodeResources nodeResources = new NodeResources(1, 4, 100, 1); ProvisioningTester tester = new ProvisioningTester.Builder().zone(new Zone(Environment.prod, RegionName.from("us-east"))).build(); tester.makeReadyHosts(4, hostResources).activateTenantHosts(); @@ -444,7 +444,7 @@ public class VirtualNodeProvisioningTest { catch (Exception e) { assertEquals("No room for 3 nodes as 2 of 4 hosts are exclusive", "Could not satisfy request for 3 nodes with " + - "[vcpu: 2.0, memory: 4.0 Gb, disk 100.0 Gb, bandwidth: 1.0 Gbps, architecture: x86_64] " + + "[vcpu: 1.0, memory: 4.0 Gb, disk 100.0 Gb, bandwidth: 1.0 Gbps, architecture: x86_64] " + "in tenant2.app2 container cluster 'my-container' 6.39: " + "Node allocation failure on group 0: " + "Not enough suitable nodes available due to host exclusivity constraints", -- cgit v1.2.3