diff options
Diffstat (limited to 'node-repository')
3 files changed, 19 insertions, 19 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterModel.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterModel.java index ae18e7ffb91..6fe065bf48d 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterModel.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterModel.java @@ -94,14 +94,17 @@ public class ClusterModel { /** Returns the relative load adjustment that should be made to this cluster given available measurements. */ public Load loadAdjustment() { if (nodeTimeseries().measurementsPerNode() == 0) return Load.one(); // No info, no change - /* + // Should we scale up? + /* Load relativePeak = nodeTimeseries().peakLoad().divide(idealLoad()); + System.out.println("Relative peak " + relativePeak); if (relativePeak.any(v -> v > 1)) return relativePeak.max(Load.one()); // Don't downscale any dimension if we upscale - // Should we scale down? - */ + // TODO + */ + return averageLoad().divide(idealLoad()); } 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 28f37546eb6..393baa63c88 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 @@ -78,10 +78,10 @@ public class AutoscalingTest { /** Using too many resources for a short period is proof we should scale up regardless of the time that takes. */ @Test - @Ignore // TODO + @Ignore public void test_autoscaling_up_is_fast() { var fixture = AutoscalingTester.fixture().build(); - fixture.loader().applyLoad(1.0, 1.0, 1.0, 1); + fixture.loader().applyLoad(1.0, 1.0, 1.0, 6); fixture.tester().assertResources("Scaling up since resource usage is too high", 10, 1, 9.4, 8.5, 92.6, fixture.autoscale()); @@ -559,7 +559,7 @@ public class AutoscalingTest { fixture.tester.clock().advance(timeAdded.negated()); fixture.loader().addCpuMeasurements(0.4, 200); fixture.tester().assertResources("Query only -> largest possible", - 8, 1, 4.9, 5.7, 57.1, + 8, 1, 4.6, 5.7, 57.1, fixture.autoscale()); fixture.tester().clock().advance(Duration.ofDays(2)); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/Loader.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/Loader.java index c0203f5f202..b7041553c25 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/Loader.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/Loader.java @@ -19,6 +19,7 @@ import java.util.function.IntFunction; public class Loader { private final Fixture fixture; + private final Duration samplingInterval = Duration.ofSeconds(150L); public Loader(Fixture fixture) { this.fixture = fixture; @@ -38,7 +39,7 @@ public class Loader { float oneExtraNodeFactor = (float)(nodes.size() - 1.0) / (nodes.size()); Instant initialTime = fixture.tester().clock().instant(); for (int i = 0; i < count; i++) { - fixture.tester().clock().advance(Duration.ofSeconds(150)); + fixture.tester().clock().advance(samplingInterval); for (Node node : nodes) { Load load = new Load(value, ClusterModel.idealMemoryLoad, @@ -63,23 +64,21 @@ public class Loader { Map.of(fixture.clusterId(), new ClusterMetricSnapshot(fixture.tester().clock().instant(), queryRate.apply(i), writeRate.apply(i)))); - fixture.tester().clock().advance(Duration.ofMinutes(5)); + fixture.tester().clock().advance(samplingInterval); } return Duration.between(initialTime, fixture.tester().clock().instant()); } public void applyCpuLoad(double cpuLoad, int measurements) { - Duration samplingInterval = Duration.ofSeconds(150L); // in addCpuMeasurements addCpuMeasurements((float)cpuLoad, measurements); fixture.tester().clock().advance(samplingInterval.negated().multipliedBy(measurements)); - addQueryRateMeasurements(measurements, samplingInterval, t -> t == 0 ? 20.0 : 10.0); // Query traffic only + addQueryRateMeasurements(measurements, t -> t == 0 ? 20.0 : 10.0); // Query traffic only } public void applyMemLoad(double memLoad, int measurements) { - Duration samplingInterval = Duration.ofSeconds(150L); // in addMemMeasurements addMemMeasurements(memLoad, measurements); fixture.tester().clock().advance(samplingInterval.negated().multipliedBy(measurements)); - addQueryRateMeasurements(measurements, samplingInterval, t -> t == 0 ? 20.0 : 10.0); // Query traffic only + addQueryRateMeasurements(measurements, t -> t == 0 ? 20.0 : 10.0); // Query traffic only } /** @@ -93,7 +92,7 @@ public class Loader { NodeList nodes = fixture.nodes(); float oneExtraNodeFactor = (float)(nodes.size() - 1.0) / (nodes.size()); for (int i = 0; i < count; i++) { - fixture.tester().clock().advance(Duration.ofMinutes(1)); + fixture.tester().clock().advance(samplingInterval); for (Node node : nodes) { Load load = new Load(0.2, value, @@ -117,7 +116,7 @@ public class Loader { int count) { Instant initialTime = fixture.tester().clock().instant(); for (int i = 0; i < count; i++) { - fixture.tester().clock().advance(Duration.ofMinutes(1)); + fixture.tester().clock().advance(samplingInterval); for (Node node : fixture.nodes()) { fixture.tester().nodeMetricsDb().addNodeMetrics(List.of(new Pair<>(node.hostname(), new NodeMetricSnapshot(fixture.tester().clock().instant(), @@ -132,20 +131,18 @@ public class Loader { } public void applyLoad(double cpuLoad, double memoryLoad, double diskLoad, int measurements) { - Duration samplingInterval = Duration.ofSeconds(150L); // in addCpuMeasurements addMeasurements(cpuLoad, memoryLoad, diskLoad, measurements); fixture.tester().clock().advance(samplingInterval.negated().multipliedBy(measurements)); - addQueryRateMeasurements(measurements, samplingInterval, t -> t == 0 ? 20.0 : 10.0); // Query traffic only + addQueryRateMeasurements(measurements, 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 addMeasurements(cpuLoad, memoryLoad, diskLoad, generation, inService, stable, measurements); fixture.tester().clock().advance(samplingInterval.negated().multipliedBy(measurements)); - addQueryRateMeasurements(measurements, samplingInterval, t -> t == 0 ? 20.0 : 10.0); // Query traffic only + addQueryRateMeasurements(measurements, t -> t == 0 ? 20.0 : 10.0); // Query traffic only } - public Duration addQueryRateMeasurements(int measurements, Duration samplingInterval, IntFunction<Double> queryRate) { + public Duration addQueryRateMeasurements(int measurements, IntFunction<Double> queryRate) { Instant initialTime = fixture.tester().clock().instant(); for (int i = 0; i < measurements; i++) { fixture.tester().nodeMetricsDb().addClusterMetrics(fixture.applicationId(), |