summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2022-07-18 12:50:28 +0200
committerJon Bratseth <bratseth@gmail.com>2022-07-18 12:50:28 +0200
commit09ddb0276ba6d7433d932722a4ed49fd02a612f2 (patch)
tree7e4514eecc5332b567e128ac1cb77527003117d8
parent185ce3739aea35a6c07951972b40704018425018 (diff)
Use fixture
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java49
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java18
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/Fixture.java13
3 files changed, 37 insertions, 43 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 4a7f2426fac..59696f7d442 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
@@ -388,43 +388,24 @@ public class AutoscalingTest {
@Test
public void test_autoscaling_considers_real_resources() {
- NodeResources hostResources = new NodeResources(60, 100, 1000, 10);
- ClusterResources min = new ClusterResources(2, 1, new NodeResources( 2, 20, 200, 1));
- ClusterResources max = new ClusterResources(4, 1, new NodeResources(60, 100, 1000, 1));
- var capacity = Capacity.from(min, max);
-
{ // No memory tax
- AutoscalingTester tester = new AutoscalingTester(new Zone(Environment.prod, RegionName.from("us-east")),
- hostResources,
- new OnlySubtractingWhenForecastingCalculator(0));
-
- ApplicationId application1 = AutoscalingTester.applicationId("app1");
- ClusterSpec cluster1 = AutoscalingTester.clusterSpec(ClusterSpec.Type.content, "cluster1");
-
- tester.deploy(application1, cluster1, min);
- tester.addMeasurements(1.0f, 1.0f, 0.7f, 0, 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 up",
- 4, 1, 6.7, 20.5, 200,
- tester.autoscale(application1, cluster1, capacity));
+ var fixture = AutoscalingTester.fixture()
+ .resourceCalculator(new OnlySubtractingWhenForecastingCalculator(0))
+ .build();
+ fixture.applyLoad(1.0, 1.0, 0.7, 1000);
+ fixture.tester().assertResources("Scaling up",
+ 9, 1, 5.0, 9.6, 72.9,
+ fixture.autoscale());
}
- { // 15 Gb memory tax
- AutoscalingTester tester = new AutoscalingTester(new Zone(Environment.prod, RegionName.from("us-east")),
- hostResources,
- new OnlySubtractingWhenForecastingCalculator(15));
-
- ApplicationId application1 = AutoscalingTester.applicationId("app1");
- ClusterSpec cluster1 = AutoscalingTester.clusterSpec(ClusterSpec.Type.content, "cluster1");
-
- tester.deploy(application1, cluster1, min);
- tester.addMeasurements(1.0f, 1.0f, 0.7f, 0, 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 up",
- 4, 1, 6.7, 35.5, 200,
- tester.autoscale(application1, cluster1, capacity));
+ {
+ var fixture = AutoscalingTester.fixture()
+ .resourceCalculator(new OnlySubtractingWhenForecastingCalculator(3))
+ .build();
+ fixture.applyLoad(1.0, 1.0, 0.7, 1000);
+ fixture.tester().assertResources("With 3Gb memory tax, we scale up memory more",
+ 7, 1, 6.4, 15.8, 97.2,
+ fixture.autoscale());
}
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java
index 748b8656358..e3f85a16c3d 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java
@@ -45,7 +45,7 @@ class AutoscalingTester {
private final ProvisioningTester provisioningTester;
private final Autoscaler autoscaler;
- private final MockHostResourcesCalculator hostResourcesCalculator;
+ private final HostResourcesCalculator hostResourcesCalculator;
private final CapacityPolicies capacityPolicies;
/** Creates an autoscaling tester with a single host type ready */
@@ -76,7 +76,7 @@ class AutoscalingTester {
}
public AutoscalingTester(Zone zone, List<Flavor> flavors) {
- this(zone, flavors, new MockHostResourcesCalculator(zone));
+ this(zone, flavors, new MockHostResourcesCalculator(zone, 3));
}
private AutoscalingTester(Zone zone, List<Flavor> flavors, HostResourcesCalculator resourcesCalculator) {
@@ -86,7 +86,7 @@ class AutoscalingTester {
.hostProvisioner(zone.getCloud().dynamicProvisioning() ? new MockHostProvisioner(flavors) : null)
.build();
- hostResourcesCalculator = new MockHostResourcesCalculator(zone);
+ hostResourcesCalculator = resourcesCalculator;
autoscaler = new Autoscaler(nodeRepository());
capacityPolicies = new CapacityPolicies(provisioningTester.nodeRepository());
}
@@ -417,15 +417,17 @@ class AutoscalingTester {
public static class MockHostResourcesCalculator implements HostResourcesCalculator {
private final Zone zone;
+ private double memoryTax = 0;
- public MockHostResourcesCalculator(Zone zone) {
+ public MockHostResourcesCalculator(Zone zone, double memoryTax) {
this.zone = zone;
+ this.memoryTax = memoryTax;
}
@Override
public NodeResources realResourcesOf(Nodelike node, NodeRepository nodeRepository) {
if (zone.getCloud().dynamicProvisioning())
- return node.resources().withMemoryGb(node.resources().memoryGb() - 3);
+ return node.resources().withMemoryGb(node.resources().memoryGb() - memoryTax);
else
return node.resources();
}
@@ -433,19 +435,19 @@ class AutoscalingTester {
@Override
public NodeResources advertisedResourcesOf(Flavor flavor) {
if (zone.getCloud().dynamicProvisioning())
- return flavor.resources().withMemoryGb(flavor.resources().memoryGb() + 3);
+ return flavor.resources().withMemoryGb(flavor.resources().memoryGb() + memoryTax);
else
return flavor.resources();
}
@Override
public NodeResources requestToReal(NodeResources resources, boolean exclusive) {
- return resources.withMemoryGb(resources.memoryGb() - 3);
+ return resources.withMemoryGb(resources.memoryGb() - memoryTax);
}
@Override
public NodeResources realToRequest(NodeResources resources, boolean exclusive) {
- return resources.withMemoryGb(resources.memoryGb() + 3);
+ return resources.withMemoryGb(resources.memoryGb() + memoryTax);
}
@Override
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 67a51caaed6..751e221f19e 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
@@ -5,8 +5,12 @@ import com.yahoo.config.provision.ApplicationId;
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.NodeResources;
+import com.yahoo.config.provision.RegionName;
+import com.yahoo.config.provision.Zone;
import com.yahoo.vespa.hosted.provision.NodeList;
+import com.yahoo.vespa.hosted.provision.provisioning.HostResourcesCalculator;
import java.time.Duration;
import java.util.Optional;
@@ -28,7 +32,7 @@ public class Fixture {
application = builder.application;
cluster = builder.cluster;
capacity = builder.capacity;
- tester = new AutoscalingTester(builder.hostResources);
+ tester = new AutoscalingTester(builder.zone, builder.hostResources, builder.resourceCalculator);
var deployCapacity = initialResources.isPresent() ? Capacity.from(initialResources.get()) : capacity;
tester.deploy(builder.application, builder.cluster, deployCapacity);
}
@@ -111,6 +115,8 @@ public class Fixture {
ApplicationId application = AutoscalingTester.applicationId("application1");
ClusterSpec cluster = ClusterSpec.request(ClusterSpec.Type.content, ClusterSpec.Id.from("cluster1")).vespaVersion("7").build();
+ Zone zone = new Zone(Environment.prod, RegionName.from("us-east"));
+ HostResourcesCalculator resourceCalculator = new AutoscalingTester.MockHostResourcesCalculator(zone, 0);
public Fixture.Builder clusterType(ClusterSpec.Type type) {
cluster = ClusterSpec.request(type, cluster.id()).vespaVersion("7").build();
@@ -132,6 +138,11 @@ public class Fixture {
return this;
}
+ public Fixture.Builder resourceCalculator(HostResourcesCalculator resourceCalculator) {
+ this.resourceCalculator = resourceCalculator;
+ return this;
+ }
+
public Fixture build() {
return new Fixture(this, initialResources);
}