summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorValerij Fredriksen <freva@users.noreply.github.com>2023-02-13 16:34:33 +0100
committerGitHub <noreply@github.com>2023-02-13 16:34:33 +0100
commitda08b64b7b8abc422eaaea119f0940897cc4aacf (patch)
tree3ea4f052f2de41066625b950f8d4c2fcc5f09f0b /node-repository
parent3da5e19509fcc10d4cdbcc49747cacc7cac2ae2e (diff)
Revert "Revert "Require 2 vCPU for exclusive hosts in prod" "
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeResourceLimits.java3
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java16
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicProvisioningTest.java24
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisionerTest.java5
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java2
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/VirtualNodeProvisioningTest.java10
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 66895867623..73e1141a823 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,8 +62,9 @@ public class NodeResourceLimits {
}
private double minAdvertisedVcpu(ClusterSpec cluster) {
+ if (zone().environment().isProduction() && ! zone().system().isCd() && 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 23485690fdb..a5cfc04afd4 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,15 +1,13 @@
// 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;
@@ -19,6 +17,8 @@ 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( 1, 4, 100, 1));
+ var min = new ClusterResources( 2, 1, new NodeResources( 3, 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, 2, 4, 100,
+ 2, 1, 4, 8, 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 half the cpu",
- 3, 1, 1.1, 4, 100.0,
+ "50% more nodes with less cpu and memory",
+ 3, 1, 3, 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, 2, 4, 100,
+ 2, 1, 4, 8, 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 66b278a52db..bead36c5464 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(1, 10, 10, 1);
+ NodeResources exclusiveResources = new NodeResources(2, 10, 20, 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(1, 20, 50, 1);
+ NodeResources smallResources = new NodeResources(2, 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(1, 4, 10, 4);
+ NodeResources resources = new NodeResources(2, 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(1, 20, 50, 1);
+ NodeResources smallerExclusiveResources = new NodeResources(2, 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<Flavor> 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)));
+ List<Flavor> 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)));
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(1, 4, 50, 0.1, DiskSpeed.any, StorageType.any, Architecture.any)));
+ Capacity capacity = Capacity.from(new ClusterResources(4, 2, new NodeResources(2, 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, 1, 5, 20),
+ tester.activate(app1, cluster1, Capacity.from(resources(4, 2, 2, 5, 20),
resources(6, 3, 4, 20, 40)));
tester.assertNodes("Initial allocation at first actual flavor above min (except for disk)",
- 4, 2, 1, 10, 20,
+ 4, 2, 2, 20, 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, 1, 5, 15),
+ tester.activate(app1, cluster1, Capacity.from(resources(2, 1, 2, 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, 1, 5, 10),
- resources(9, 3, 5, 20, 15)));
+ tester.activate(app1, cluster1, Capacity.from(resources(6, 3, 2, 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 6b877ed4cea..c791c7848d7 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,7 +42,6 @@ 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;
@@ -57,7 +56,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(1, 4, 10, 0.3);
+ private final NodeResources nodeResources = new NodeResources(2, 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 5e9549aafbb..0ab6e31b20f 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", 1., 20., 50, 5, Flavor.Type.BARE_METAL).cost(2);
+ b.addFlavor("small", 2., 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 086df4d0c33..c1c4630f431 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(1, 4, 100, 1);
+ NodeResources nodeResources = new NodeResources(2, 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(1, 4, 100, 1);
+ NodeResources nodeResources = new NodeResources(2, 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(1, 4, 100, 1);
+ NodeResources nodeResources = new NodeResources(2, 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(1, 4, 100, 1);
+ NodeResources nodeResources = new NodeResources(2, 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: 1.0, memory: 4.0 Gb, disk 100.0 Gb, bandwidth: 1.0 Gbps, architecture: x86_64] " +
+ "[vcpu: 2.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",