diff options
author | Jon Bratseth <bratseth@gmail.com> | 2022-08-01 21:55:28 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@gmail.com> | 2022-08-01 21:55:28 +0200 |
commit | dd0645d48a9386b10446bb6c3b56d6d8b38e35e7 (patch) | |
tree | 2cf8b87c60de0d1e2862c49fddd89026e2a8fc00 /node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/Fixture.java | |
parent | 3bb080297cfb21fea5d17f3e0079ff5d4179ec00 (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.java | 91 |
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 { |