aboutsummaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2022-12-07 16:14:11 +0100
committerJon Bratseth <bratseth@gmail.com>2022-12-07 16:14:11 +0100
commit74d610c0b4f7285b4aebc4528bc2d281738354ca (patch)
treef8118358ad120d7279db4a11e2355fe37aaa31bc /node-repository
parentc82f99ab1aec0bdf6d098b2dfebc985b8b096eea (diff)
Scale down slightly more aggressively
Don't require a minimum number of measurements as we might not be able to ever collect them fast enough within the scaling window.
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterModel.java3
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java19
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainerTest.java6
3 files changed, 26 insertions, 2 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 db5771cd623..6d3deae4f66 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
@@ -72,6 +72,7 @@ public class ClusterModel {
this.scalingDuration = computeScalingDuration(cluster, clusterSpec);
this.clusterTimeseries = metricsDb.getClusterTimeseries(application.id(), cluster.id());
this.nodeTimeseries = new ClusterNodesTimeseries(scalingDuration(), cluster, nodes, metricsDb);
+ System.out.println("Scaling duration: " + scalingDuration + ", measurements per node: " + nodeTimeseries.measurementsPerNode());
}
ClusterModel(Zone zone,
@@ -100,6 +101,7 @@ public class ClusterModel {
/** Returns the relative load adjustment that should be made to this cluster given available measurements. */
public Load loadAdjustment() {
+ System.out.println("Node timeseries is empty: " + nodeTimeseries().isEmpty());
if (nodeTimeseries().isEmpty()) return Load.one();
Load adjustment = peakLoad().divide(idealLoad());
@@ -111,7 +113,6 @@ public class ClusterModel {
/** Are we in a position to make decisions to scale down at this point? */
private boolean safeToScaleDown() {
if (hasScaledIn(scalingDuration().multipliedBy(3))) return false;
- if (nodeTimeseries().measurementsPerNode() < 4) return false;
if (nodeTimeseries().nodesMeasured() != nodeCount()) return false;
return true;
}
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 ff72d22bb39..eda677c6e59 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,6 +78,25 @@ public class AutoscalingTest {
}
@Test
+ public void test_container_scaling_down_exclusive() {
+ var min = new ClusterResources(2, 1, new NodeResources(4, 8, 50, 0.1));
+ var now = new ClusterResources(8, 1, new NodeResources(4, 8, 50, 0.1));
+ var max = new ClusterResources(8, 1, new NodeResources(4, 8, 50, 0.1));
+ var fixture = AutoscalingTester.fixture()
+ .awsProdSetup(false)
+ .clusterType(ClusterSpec.Type.container)
+ .initialResources(Optional.of(now))
+ .capacity(Capacity.from(min, max))
+ .build();
+ fixture.tester().setScalingDuration(fixture.applicationId(), fixture.clusterSpec.id(), Duration.ofMinutes(5));
+
+ fixture.loader().applyLoad(new Load(0.01, 0.38, 0), 5);
+ fixture.tester().assertResources("Scaling down",
+ 2, 1, 4, 8, 50,
+ fixture.autoscale());
+ }
+
+ @Test
public void initial_deployment_with_host_sharing_flag() {
var min = new ClusterResources(7, 1, new NodeResources(2.0, 10.0, 384.0, 0.1));
var max = new ClusterResources(7, 1, new NodeResources(2.4, 32.0, 768.0, 0.1));
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainerTest.java
index 2d05754d96e..5ceb28d3fed 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainerTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainerTest.java
@@ -178,7 +178,11 @@ public class AutoscalingMaintainerTest {
}
assertEquals(Cluster.maxScalingEvents, tester.cluster(app1, cluster1).scalingEvents().size());
- assertEquals("The latest rescaling is the last event stored",
+
+ // Complete last event
+ tester.addMeasurements(0.1f, 0.1f, 0.1f, 20, 1, app1);
+ tester.maintainer().maintain();
+ assertEquals("Last event is completed",
tester.clock().instant(),
tester.cluster(app1, cluster1).scalingEvents().get(Cluster.maxScalingEvents - 1).completion().get());
}