summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2022-08-01 17:23:50 +0200
committerJon Bratseth <bratseth@gmail.com>2022-08-01 17:23:50 +0200
commit60685197a73e28e9ef4fefdf0a4762ae0f396449 (patch)
tree4f5375836e4c83177c889b11461bdb37f440e516 /node-repository
parented2da152e1af877c2665f77df1674bfcaa47dde5 (diff)
Use fixture
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java101
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/Fixture.java16
2 files changed, 59 insertions, 58 deletions
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 d247a9a0801..d9198452b23 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,19 +1,19 @@
// 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.ApplicationId;
import com.yahoo.config.provision.Capacity;
-import com.yahoo.config.provision.Cloud;
import com.yahoo.config.provision.ClusterResources;
import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.config.provision.Environment;
import com.yahoo.config.provision.Flavor;
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 static com.yahoo.config.provision.NodeResources.StorageType.remote;
import com.yahoo.config.provision.NodeType;
import com.yahoo.config.provision.RegionName;
-import com.yahoo.config.provision.SystemName;
import com.yahoo.config.provision.Zone;
import com.yahoo.vespa.hosted.provision.NodeRepository;
import com.yahoo.vespa.hosted.provision.Nodelike;
@@ -22,8 +22,6 @@ import com.yahoo.vespa.hosted.provision.provisioning.HostResourcesCalculator;
import org.junit.Test;
import java.time.Duration;
-import java.util.ArrayList;
-import java.util.List;
import java.util.Optional;
import static org.junit.Assert.assertEquals;
@@ -97,7 +95,7 @@ public class AutoscalingTest {
@Test
public void autoscaling_handles_disk_setting_changes() {
- var resources = new NodeResources(3, 100, 100, 1, NodeResources.DiskSpeed.slow);
+ var resources = new NodeResources(3, 100, 100, 1, slow);
var fixture = AutoscalingTester.fixture()
.hostResources(resources)
.initialResources(Optional.of(new ClusterResources(5, 1, resources)))
@@ -105,32 +103,32 @@ public class AutoscalingTest {
.build();
assertTrue(fixture.tester().nodeRepository().nodes().list().owner(fixture.application).stream()
- .allMatch(n -> n.allocation().get().requestedResources().diskSpeed() == NodeResources.DiskSpeed.slow));
+ .allMatch(n -> n.allocation().get().requestedResources().diskSpeed() == slow));
fixture.tester().clock().advance(Duration.ofDays(2));
fixture.applyCpuLoad(0.25, 120);
// Changing min and max from slow to any
ClusterResources min = new ClusterResources( 2, 1,
- new NodeResources(1, 1, 1, 1, NodeResources.DiskSpeed.any));
+ new NodeResources(1, 1, 1, 1, DiskSpeed.any));
ClusterResources max = new ClusterResources(20, 1,
- new NodeResources(100, 1000, 1000, 1, NodeResources.DiskSpeed.any));
+ new NodeResources(100, 1000, 1000, 1, DiskSpeed.any));
var capacity = Capacity.from(min, max);
ClusterResources scaledResources = fixture.tester().assertResources("Scaling up",
14, 1, 1.4, 30.8, 30.8,
fixture.autoscale(capacity));
assertEquals("Disk speed from new capacity is used",
- NodeResources.DiskSpeed.any, scaledResources.nodeResources().diskSpeed());
+ DiskSpeed.any, scaledResources.nodeResources().diskSpeed());
fixture.deploy(Capacity.from(scaledResources));
assertTrue(fixture.nodes().stream()
- .allMatch(n -> n.allocation().get().requestedResources().diskSpeed() == NodeResources.DiskSpeed.any));
+ .allMatch(n -> n.allocation().get().requestedResources().diskSpeed() == DiskSpeed.any));
}
@Test
public void autoscaling_target_preserves_any() {
NodeResources resources = new NodeResources(1, 10, 10, 1);
- var capacity = Capacity.from(new ClusterResources( 2, 1, resources.with(NodeResources.DiskSpeed.any)),
- new ClusterResources( 10, 1, resources.with(NodeResources.DiskSpeed.any)));
+ var capacity = Capacity.from(new ClusterResources( 2, 1, resources.with(DiskSpeed.any)),
+ new ClusterResources( 10, 1, resources.with(DiskSpeed.any)));
var fixture = AutoscalingTester.fixture()
.capacity(capacity)
.initialResources(Optional.empty())
@@ -139,13 +137,13 @@ public class AutoscalingTest {
// Redeployment without target: Uses current resource numbers with *requested* non-numbers (i.e disk-speed any)
assertTrue(fixture.tester().nodeRepository().applications().get(fixture.application).get().cluster(fixture.cluster.id()).get().targetResources().isEmpty());
fixture.deploy();
- assertEquals(NodeResources.DiskSpeed.any, fixture.nodes().first().get().allocation().get().requestedResources().diskSpeed());
+ assertEquals(DiskSpeed.any, fixture.nodes().first().get().allocation().get().requestedResources().diskSpeed());
// Autoscaling: Uses disk-speed any as well
fixture.deactivateRetired(capacity);
fixture.tester().clock().advance(Duration.ofDays(1));
fixture.applyCpuLoad(0.8, 120);
- assertEquals(NodeResources.DiskSpeed.any, fixture.autoscale(capacity).target().get().nodeResources().diskSpeed());
+ assertEquals(DiskSpeed.any, fixture.autoscale(capacity).target().get().nodeResources().diskSpeed());
}
@Test
@@ -231,11 +229,10 @@ public class AutoscalingTest {
@Test
public void container_prefers_remote_disk_when_no_local_match() {
var resources = new ClusterResources( 2, 1, new NodeResources(3, 100, 50, 1));
- var local = new NodeResources(3, 100, 75, 1, DiskSpeed.fast, StorageType.local);
- var remote = new NodeResources(3, 100, 50, 1, DiskSpeed.fast, StorageType.remote);
+ var local = new NodeResources(3, 100, 75, 1, fast, StorageType.local);
+ var remote = new NodeResources(3, 100, 50, 1, fast, StorageType.remote);
var fixture = AutoscalingTester.fixture()
- .zone(new Zone(new Cloud.Builder().dynamicProvisioning(true).build(),
- SystemName.defaultSystem(), Environment.prod, RegionName.defaultName()))
+ .dynamicProvisioning(true)
.clusterType(ClusterSpec.Type.container)
.hostResources(local, remote)
.capacity(Capacity.from(resources))
@@ -255,11 +252,10 @@ public class AutoscalingTest {
@Test
public void content_prefers_local_disk_when_no_local_match() {
var resources = new ClusterResources( 2, 1, new NodeResources(3, 100, 50, 1));
- var local = new NodeResources(3, 100, 75, 1, DiskSpeed.fast, StorageType.local);
- var remote = new NodeResources(3, 100, 50, 1, DiskSpeed.fast, StorageType.remote);
+ var local = new NodeResources(3, 100, 75, 1, fast, StorageType.local);
+ var remote = new NodeResources(3, 100, 50, 1, fast, StorageType.remote);
var fixture = AutoscalingTester.fixture()
- .zone(new Zone(new Cloud.Builder().dynamicProvisioning(true).build(),
- SystemName.defaultSystem(), Environment.prod, RegionName.defaultName()))
+ .dynamicProvisioning(true)
.clusterType(ClusterSpec.Type.content)
.hostResources(local, remote)
.capacity(Capacity.from(resources))
@@ -429,41 +425,30 @@ public class AutoscalingTest {
public void test_autoscaling_with_dynamic_provisioning() {
ClusterResources min = new ClusterResources( 2, 1, new NodeResources(1, 1, 1, 1));
ClusterResources max = new ClusterResources(20, 1, new NodeResources(100, 1000, 1000, 1));
- var capacity = Capacity.from(min, max);
- List<Flavor> flavors = new ArrayList<>();
- flavors.add(new Flavor("aws-xlarge", new NodeResources(3, 200, 100, 1, NodeResources.DiskSpeed.fast, NodeResources.StorageType.remote)));
- flavors.add(new Flavor("aws-large", new NodeResources(3, 150, 100, 1, NodeResources.DiskSpeed.fast, NodeResources.StorageType.remote)));
- flavors.add(new Flavor("aws-medium", new NodeResources(3, 100, 100, 1, NodeResources.DiskSpeed.fast, NodeResources.StorageType.remote)));
- flavors.add(new Flavor("aws-small", new NodeResources(3, 80, 100, 1, NodeResources.DiskSpeed.fast, NodeResources.StorageType.remote)));
- AutoscalingTester tester = new AutoscalingTester(new Zone(Cloud.builder()
- .dynamicProvisioning(true)
- .build(),
- SystemName.main,
- Environment.prod, RegionName.from("us-east")),
- flavors);
-
- ApplicationId application1 = AutoscalingTester.applicationId("application1");
- ClusterSpec cluster1 = AutoscalingTester.clusterSpec(ClusterSpec.Type.content, "cluster1");
-
- // deploy (Why 103 Gb memory? See AutoscalingTester.MockHostResourcesCalculator
- tester.deploy(application1, cluster1, 5, 1, new NodeResources(3, 103, 100, 1));
-
- tester.clock().advance(Duration.ofDays(2));
- tester.addMemMeasurements(0.9f, 0.6f, 120, application1);
- ClusterResources scaledResources = tester.assertResources("Scaling up since resource usage is too high.",
- 8, 1, 3, 83, 34.3,
- tester.autoscale(application1, cluster1, capacity));
-
- tester.deploy(application1, cluster1, scaledResources);
- tester.deactivateRetired(application1, cluster1, scaledResources);
-
- tester.clock().advance(Duration.ofDays(2));
- tester.addMemMeasurements(0.3f, 0.6f, 1000, application1);
- tester.clock().advance(Duration.ofMinutes(-10 * 5));
- tester.addQueryRateMeasurements(application1, cluster1.id(), 10, t -> t == 0 ? 20.0 : 10.0); // Query traffic only
- tester.assertResources("Scaling down since resource usage has gone down",
- 5, 1, 3, 83, 36.0,
- tester.autoscale(application1, cluster1, capacity));
+ var fixture = AutoscalingTester.fixture()
+ .dynamicProvisioning(true)
+ .hostResources(new NodeResources(3, 200, 100, 1, fast, remote),
+ new NodeResources(3, 150, 100, 1, fast, remote),
+ new NodeResources(3, 100, 100, 1, fast, remote),
+ new NodeResources(3, 80, 100, 1, fast, remote))
+ .capacity(Capacity.from(min, max))
+ .initialResources(Optional.of(new ClusterResources(5, 1,
+ new NodeResources(3, 100, 100, 1))))
+ .build();
+
+ fixture.tester().clock().advance(Duration.ofDays(2));
+ fixture.applyMemLoad(0.9, 120);
+ var scaledResources = fixture.tester().assertResources("Scaling up since resource usage is too high.",
+ 8, 1, 3, 80, 57.1,
+ fixture.autoscale());
+ fixture.deploy(Capacity.from(scaledResources));
+ fixture.deactivateRetired(Capacity.from(scaledResources));
+
+ fixture.tester().clock().advance(Duration.ofDays(2));
+ fixture.applyMemLoad(0.3, 1000);
+ fixture.tester().assertResources("Scaling down since resource usage has gone down",
+ 5, 1, 3, 80, 100,
+ fixture.autoscale());
}
@Test
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/Fixture.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/Fixture.java
index 109f25ec0e1..3e4dec3c248 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/Fixture.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/Fixture.java
@@ -3,11 +3,13 @@ package com.yahoo.vespa.hosted.provision.autoscale;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.Capacity;
+import com.yahoo.config.provision.Cloud;
import com.yahoo.config.provision.ClusterResources;
import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.config.provision.Environment;
import com.yahoo.config.provision.NodeResources;
import com.yahoo.config.provision.RegionName;
+import com.yahoo.config.provision.SystemName;
import com.yahoo.config.provision.Zone;
import com.yahoo.vespa.hosted.provision.NodeList;
import com.yahoo.vespa.hosted.provision.provisioning.HostResourcesCalculator;
@@ -145,6 +147,20 @@ public class Fixture {
return this;
}
+ /**
+ * Set to true to behave as if hosts are provisioned dynamically,
+ * and must therefore be allocated completely to one tenant node.
+ */
+ public Fixture. Builder dynamicProvisioning(boolean dynamic) {
+ this.zone = new Zone(Cloud.builder()
+ .dynamicProvisioning(dynamic)
+ .build(),
+ zone.system(),
+ zone.environment(),
+ zone.region());
+ return this;
+ }
+
public Fixture.Builder clusterType(ClusterSpec.Type type) {
cluster = ClusterSpec.request(type, cluster.id()).vespaVersion("7").build();
return this;