aboutsummaryrefslogtreecommitdiffstats
path: root/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/Fixture.java
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2022-08-01 21:55:28 +0200
committerJon Bratseth <bratseth@gmail.com>2022-08-01 21:55:28 +0200
commitdd0645d48a9386b10446bb6c3b56d6d8b38e35e7 (patch)
tree2cf8b87c60de0d1e2862c49fddd89026e2a8fc00 /node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/Fixture.java
parent3bb080297cfb21fea5d17f3e0079ff5d4179ec00 (diff)
Separate loading methods
Diffstat (limited to 'node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/Fixture.java')
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/Fixture.java91
1 files changed, 34 insertions, 57 deletions
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 56ffc4ef993..88ddb0ad9f8 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
@@ -1,6 +1,7 @@
// 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.collections.Pair;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.Capacity;
import com.yahoo.config.provision.Cloud;
@@ -10,14 +11,17 @@ 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.Node;
import com.yahoo.vespa.hosted.provision.NodeList;
import com.yahoo.vespa.hosted.provision.applications.Application;
import com.yahoo.vespa.hosted.provision.applications.Cluster;
import com.yahoo.vespa.hosted.provision.provisioning.HostResourcesCalculator;
import java.time.Duration;
+import java.time.Instant;
import java.util.Arrays;
import java.util.List;
+import java.util.Map;
import java.util.Optional;
import java.util.function.IntFunction;
import java.util.stream.Collectors;
@@ -30,38 +34,51 @@ import java.util.stream.Collectors;
public class Fixture {
final AutoscalingTester tester;
- final ApplicationId application;
- final ClusterSpec cluster;
+ final ApplicationId applicationId;
+ final ClusterSpec clusterSpec;
final Capacity capacity;
+ final Loader loader;
public Fixture(Fixture.Builder builder, Optional<ClusterResources> initialResources) {
- application = builder.application;
- cluster = builder.cluster;
+ applicationId = builder.application;
+ clusterSpec = builder.cluster;
capacity = builder.capacity;
tester = new AutoscalingTester(builder.zone, builder.resourceCalculator, builder.hostResources);
var deployCapacity = initialResources.isPresent() ? Capacity.from(initialResources.get()) : capacity;
tester.deploy(builder.application, builder.cluster, deployCapacity);
+ this.loader = new Loader(this);
}
public AutoscalingTester tester() { return tester; }
- public ApplicationId applicationId() { return application; }
+ public ApplicationId applicationId() { return applicationId; }
- public ClusterSpec.Id clusterId() { return cluster.id(); }
+ public ClusterSpec.Id clusterId() { return clusterSpec.id(); }
public Application application() {
- return tester().nodeRepository().applications().get(application).orElse(Application.empty(application));
+ return tester().nodeRepository().applications().get(applicationId).orElse(Application.empty(applicationId));
}
public Cluster cluster() {
return application().cluster(clusterId()).get();
}
+ public ClusterModel clusterModel() {
+ return new ClusterModel(application(),
+ clusterSpec,
+ cluster(),
+ nodes(),
+ tester.nodeRepository().metricsDb(),
+ tester.nodeRepository().clock());
+ }
+
/** Returns the nodes allocated to the fixture application cluster */
public NodeList nodes() {
- return tester().nodeRepository().nodes().list().owner(application).cluster(cluster.id());
+ return tester().nodeRepository().nodes().list(Node.State.active).owner(applicationId).cluster(clusterSpec.id());
}
+ public Loader loader() { return loader; }
+
/** Autoscale within the deployed capacity of this. */
public Autoscaler.Advice autoscale() {
return autoscale(capacity);
@@ -69,12 +86,12 @@ public class Fixture {
/** Autoscale within the given capacity. */
public Autoscaler.Advice autoscale(Capacity capacity) {
- return tester().autoscale(application, cluster, capacity);
+ return tester().autoscale(applicationId, clusterSpec, capacity);
}
/** Compute an autoscaling suggestion for this. */
public Autoscaler.Advice suggest() {
- return tester().suggest(application, cluster.id(), capacity.minResources(), capacity.maxResources());
+ return tester().suggest(applicationId, clusterSpec.id(), capacity.minResources(), capacity.maxResources());
}
/** Redeploy with the deployed capacity of this. */
@@ -84,62 +101,22 @@ public class Fixture {
/** Redeploy with the given capacity. */
public void deploy(Capacity capacity) {
- tester().deploy(application, cluster, capacity);
+ tester().deploy(applicationId, clusterSpec, capacity);
}
public void deactivateRetired(Capacity capacity) {
- tester().deactivateRetired(application, cluster, capacity);
+ tester().deactivateRetired(applicationId, clusterSpec, capacity);
}
public void setScalingDuration(Duration duration) {
- tester().setScalingDuration(application, cluster.id(), duration);
- }
-
- public Duration addCpuMeasurements(double cpuLoad, int measurements) {
- return tester().addCpuMeasurements((float)cpuLoad, 1.0f, measurements, application);
- }
-
- public Duration addLoadMeasurements(int measurements, IntFunction<Double> queryRate, IntFunction<Double> writeRate) {
- return tester().addLoadMeasurements(application, cluster.id(), measurements, queryRate, writeRate);
- }
-
- public void applyCpuLoad(double cpuLoad, int measurements) {
- Duration samplingInterval = Duration.ofSeconds(150L); // in addCpuMeasurements
- tester().addCpuMeasurements((float)cpuLoad, 1.0f, measurements, application);
- tester().clock().advance(samplingInterval.negated().multipliedBy(measurements));
- tester().addQueryRateMeasurements(application, cluster.id(), measurements, samplingInterval, t -> t == 0 ? 20.0 : 10.0); // Query traffic only
- }
-
- public void applyMemLoad(double memLoad, int measurements) {
- Duration samplingInterval = Duration.ofSeconds(150L); // in addMemMeasurements
- tester().addMemMeasurements((float)memLoad, 1.0f, measurements, application);
- tester().clock().advance(samplingInterval.negated().multipliedBy(measurements));
- tester().addQueryRateMeasurements(application, cluster.id(), measurements, samplingInterval, t -> t == 0 ? 20.0 : 10.0); // Query traffic only
- }
-
- public void applyDiskLoad(double diskLoad, int measurements) {
- Duration samplingInterval = Duration.ofSeconds(150L); // in addDiskMeasurements
- tester().addDiskMeasurements((float)diskLoad, 1.0f, measurements, application);
- tester().clock().advance(samplingInterval.negated().multipliedBy(measurements));
- tester().addQueryRateMeasurements(application, cluster.id(), measurements, samplingInterval, t -> t == 0 ? 20.0 : 10.0); // Query traffic only
- }
-
- public void applyLoad(double cpuLoad, double memoryLoad, double diskLoad, int measurements) {
- Duration samplingInterval = Duration.ofSeconds(150L); // in addCpuMeasurements
- tester().addMeasurements((float)cpuLoad, (float)memoryLoad, (float)diskLoad, measurements, application);
- tester().clock().advance(samplingInterval.negated().multipliedBy(measurements));
- tester().addQueryRateMeasurements(application, cluster.id(), measurements, samplingInterval, t -> t == 0 ? 20.0 : 10.0); // Query traffic only
- }
-
- public void applyLoad(double cpuLoad, double memoryLoad, double diskLoad, int generation, boolean inService, boolean stable, int measurements) {
- Duration samplingInterval = Duration.ofSeconds(150L); // in addCpuMeasurements
- tester().addMeasurements((float)cpuLoad, (float)memoryLoad, (float)diskLoad, generation, inService, stable, measurements, application);
- tester().clock().advance(samplingInterval.negated().multipliedBy(measurements));
- tester().addQueryRateMeasurements(application, cluster.id(), measurements, samplingInterval, t -> t == 0 ? 20.0 : 10.0); // Query traffic only
+ tester().setScalingDuration(applicationId, clusterSpec.id(), duration);
}
public void storeReadShare(double currentReadShare, double maxReadShare) {
- tester().storeReadShare(currentReadShare, maxReadShare, application);
+ var application = application();
+ application = application.with(application.status().withCurrentReadShare(currentReadShare)
+ .withMaxReadShare(maxReadShare));
+ tester.nodeRepository().applications().put(application, tester.nodeRepository().nodes().lock(applicationId));
}
public static class Builder {