diff options
author | Jon Bratseth <bratseth@gmail.com> | 2022-12-29 21:37:46 +0100 |
---|---|---|
committer | Jon Bratseth <bratseth@gmail.com> | 2022-12-29 21:37:46 +0100 |
commit | d58da5e3d1631914e7ecb1c46e5c58801b3d3996 (patch) | |
tree | 806ca41ef76c18cc49e35a00dfcf33a80c858c26 /node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/ScalingSuggestionsMaintainer.java | |
parent | 2678acf4d40a5673343d6fdd1b1fe66a4fc73df7 (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.java | 21 |
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) { |