From 395cf8468b42307f1897cfe926d9c49e320c44a8 Mon Sep 17 00:00:00 2001 From: Jon Bratseth Date: Wed, 24 May 2023 14:17:17 +0200 Subject: Scaling-duration cleanup - Let ClusterModel define min scaling duration - Use min values as defaults --- .../vespa/hosted/provision/applications/Cluster.java | 17 +++-------------- .../vespa/hosted/provision/autoscale/ClusterModel.java | 5 +++++ .../provision/restapi/responses/application1.json | 2 +- 3 files changed, 9 insertions(+), 15 deletions(-) (limited to 'node-repository') diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/applications/Cluster.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/applications/Cluster.java index 65e0bc558b2..1ca81df824b 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/applications/Cluster.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/applications/Cluster.java @@ -8,6 +8,7 @@ import com.yahoo.config.provision.ClusterResources; import com.yahoo.config.provision.ClusterSpec; import com.yahoo.vespa.hosted.provision.autoscale.Autoscaler; import com.yahoo.vespa.hosted.provision.autoscale.Autoscaling; +import com.yahoo.vespa.hosted.provision.autoscale.ClusterModel; import java.time.Duration; import java.time.Instant; @@ -203,20 +204,8 @@ public class Cluster { completedEventCount++; totalDuration = totalDuration.plus(event.duration().get()); } - if (completedEventCount == 0) { // Use defaults - if (clusterSpec.isStateful()) return Duration.ofHours(12); - return Duration.ofMinutes(10); - } - else { - Duration predictedDuration = totalDuration.dividedBy(completedEventCount); - - if ( clusterSpec.isStateful() ) // TODO: Remove when we have reliable completion for content clusters - predictedDuration = minimum(Duration.ofHours(12), predictedDuration); - - predictedDuration = minimum(Duration.ofMinutes(5), predictedDuration); - - return predictedDuration; - } + if (completedEventCount == 0) return ClusterModel.minScalingDuration(clusterSpec); + return minimum(ClusterModel.minScalingDuration(clusterSpec), totalDuration.dividedBy(completedEventCount)); } private static Duration minimum(Duration smallestAllowed, Duration duration) { 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 bb599b69398..53bacfea298 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 @@ -153,6 +153,11 @@ public class ClusterModel { return true; } + public static Duration minScalingDuration(ClusterSpec clusterSpec) { + if (clusterSpec.isStateful()) return Duration.ofHours(12); + return Duration.ofMinutes(5); + } + /** Returns the predicted duration of a rescaling of this cluster */ public Duration scalingDuration() { return scalingDuration; } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/application1.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/application1.json index 92e5425e84e..28bde7bd966 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/application1.json +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/application1.json @@ -140,7 +140,7 @@ "at" : 123 } ], - "scalingDuration": 600000 + "scalingDuration": 300000 } } } -- cgit v1.2.3