aboutsummaryrefslogtreecommitdiffstats
path: root/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/ScalingSuggestionsMaintainer.java
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2022-12-29 21:37:46 +0100
committerJon Bratseth <bratseth@gmail.com>2022-12-29 21:37:46 +0100
commitd58da5e3d1631914e7ecb1c46e5c58801b3d3996 (patch)
tree806ca41ef76c18cc49e35a00dfcf33a80c858c26 /node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/ScalingSuggestionsMaintainer.java
parent2678acf4d40a5673343d6fdd1b1fe66a4fc73df7 (diff)
Move AutoscalingStatus content into Autoscaling
Diffstat (limited to 'node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/ScalingSuggestionsMaintainer.java')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/ScalingSuggestionsMaintainer.java21
1 files changed, 7 insertions, 14 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/ScalingSuggestionsMaintainer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/ScalingSuggestionsMaintainer.java
index e6fadc5f5bd..af368934188 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/ScalingSuggestionsMaintainer.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/ScalingSuggestionsMaintainer.java
@@ -11,11 +11,9 @@ import com.yahoo.vespa.hosted.provision.NodeList;
import com.yahoo.vespa.hosted.provision.NodeRepository;
import com.yahoo.vespa.hosted.provision.applications.Application;
import com.yahoo.vespa.hosted.provision.applications.Applications;
-import com.yahoo.vespa.hosted.provision.applications.AutoscalingStatus;
import com.yahoo.vespa.hosted.provision.applications.Cluster;
import com.yahoo.vespa.hosted.provision.autoscale.Autoscaler;
import com.yahoo.vespa.hosted.provision.autoscale.Autoscaling;
-import com.yahoo.vespa.hosted.provision.autoscale.MetricsDb;
import java.time.Duration;
import java.util.Map;
@@ -64,15 +62,12 @@ public class ScalingSuggestionsMaintainer extends NodeRepositoryMaintainer {
Optional<Cluster> cluster = application.cluster(clusterId);
if (cluster.isEmpty()) return true;
var suggestion = autoscaler.suggest(application, cluster.get(), clusterNodes);
- if (suggestion.status().status() == AutoscalingStatus.Status.waiting) return true;
-
- // empty suggested resources == keep the current allocation
- var suggestedResources = suggestion.resources().orElse(clusterNodes.not().retired().toResources());
- if ( ! shouldUpdateSuggestion(cluster.get().suggested(), suggestedResources)) return true;
+ if (suggestion.status() == Autoscaling.Status.waiting) return true;
+ if ( ! shouldUpdateSuggestion(cluster.get().suggested(), suggestion)) return true;
// Wait only a short time for the lock to avoid interfering with change deployments
try (Mutex lock = nodeRepository().applications().lock(applicationId, Duration.ofSeconds(1))) {
- applications().get(applicationId).ifPresent(a -> updateSuggestion(suggestedResources, clusterId, a, lock));
+ applications().get(applicationId).ifPresent(a -> updateSuggestion(suggestion, clusterId, a, lock));
return true;
}
catch (ApplicationLockException e) {
@@ -80,21 +75,19 @@ public class ScalingSuggestionsMaintainer extends NodeRepositoryMaintainer {
}
}
- private boolean shouldUpdateSuggestion(Autoscaling currentSuggestion, ClusterResources suggestedResources) {
+ private boolean shouldUpdateSuggestion(Autoscaling currentSuggestion, Autoscaling newSuggestion) {
return currentSuggestion.resources().isEmpty()
|| currentSuggestion.at().isBefore(nodeRepository().clock().instant().minus(Duration.ofDays(7)))
- || isHigher(suggestedResources, currentSuggestion.resources().get());
+ || (newSuggestion.resources().isPresent() && isHigher(newSuggestion.resources().get(), currentSuggestion.resources().get()));
}
- private void updateSuggestion(ClusterResources suggestion,
+ private void updateSuggestion(Autoscaling autoscaling,
ClusterSpec.Id clusterId,
Application application,
Mutex lock) {
Optional<Cluster> cluster = application.cluster(clusterId);
if (cluster.isEmpty()) return;
- applications().put(application.with(cluster.get().withSuggested(new Autoscaling(suggestion,
- AutoscalingStatus.empty(),
- nodeRepository().clock().instant()))), lock);
+ applications().put(application.with(cluster.get().withSuggested(autoscaling)), lock);
}
private boolean isHigher(ClusterResources r1, ClusterResources r2) {