aboutsummaryrefslogtreecommitdiffstats
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
parent2678acf4d40a5673343d6fdd1b1fe66a4fc73df7 (diff)
Move AutoscalingStatus content into Autoscaling
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/applications/AutoscalingStatus.java67
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Autoscaler.java6
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Autoscaling.java62
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/ScalingSuggestionsMaintainer.java21
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/ApplicationSerializer.java45
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/Activator.java5
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/ApplicationSerializer.java4
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java11
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java5
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/ApplicationSerializerTest.java12
10 files changed, 92 insertions, 146 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/applications/AutoscalingStatus.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/applications/AutoscalingStatus.java
deleted file mode 100644
index ea15b6a42cb..00000000000
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/applications/AutoscalingStatus.java
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.hosted.provision.applications;
-
-import java.util.Objects;
-
-/**
- * The current autoscaling status of a cluster.
- * A value object.
- *
- * @author bratseth
- */
-public class AutoscalingStatus {
-
- public enum Status {
-
- /** No status is available: Aautoscaling is disabled, or a brand new application. */
- unavailable,
-
- /** Autoscaling is not taking any action at the moment due to recent changes or a lack of data */
- waiting,
-
- /** The cluster is ideally scaled to the current load */
- ideal,
-
- /** The cluster should be rescaled further, but no better configuration is allowed by the current limits */
- insufficient,
-
- /** Rescaling of this cluster has been scheduled */
- rescaling
-
- };
-
- private final Status status;
- private final String description;
-
- public AutoscalingStatus(Status status, String description) {
- this.status = status;
- this.description = description;
- }
-
- public Status status() { return status; }
- public String description() { return description; }
-
- public static AutoscalingStatus empty() { return new AutoscalingStatus(Status.unavailable, ""); }
-
- @Override
- public boolean equals(Object o) {
- if (o == this) return true;
- if ( ! ( o instanceof AutoscalingStatus other)) return false;
-
- if ( other.status != this.status ) return false;
- if ( ! other.description.equals(this.description) ) return false;
- return true;
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(status, description);
- }
-
- @Override
- public String toString() {
- return "autoscaling status: " + status +
- ( description.isEmpty() ? "" : " (" + description + ")");
- }
-
-}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Autoscaler.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Autoscaler.java
index 71ed0583317..7e429492de2 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Autoscaler.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Autoscaler.java
@@ -6,8 +6,8 @@ import com.yahoo.vespa.hosted.provision.Node;
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.AutoscalingStatus.Status;
import com.yahoo.vespa.hosted.provision.applications.Cluster;
+import com.yahoo.vespa.hosted.provision.autoscale.Autoscaling.Status;
import java.time.Duration;
import java.time.Instant;
@@ -52,7 +52,7 @@ public class Autoscaler {
*/
public Autoscaling autoscale(Application application, Cluster cluster, NodeList clusterNodes) {
if (cluster.minResources().equals(cluster.maxResources()))
- return Autoscaling.none(Status.unavailable, "Autoscaling is not enabled", now());
+ return Autoscaling.dontScale(Autoscaling.Status.unavailable, "Autoscaling is not enabled", now());
return autoscale(application, cluster, clusterNodes, Limits.of(cluster));
}
@@ -66,7 +66,7 @@ public class Autoscaler {
nodeRepository.clock());
if ( ! clusterIsStable(clusterNodes, nodeRepository))
- return Autoscaling.none(Status.waiting, "Cluster change in progress", now());
+ return Autoscaling.dontScale(Status.waiting, "Cluster change in progress", now());
var currentAllocation = new AllocatableClusterResources(clusterNodes, nodeRepository);
Optional<AllocatableClusterResources> bestAllocation =
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Autoscaling.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Autoscaling.java
index 0a58119a36a..427a5d01531 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Autoscaling.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Autoscaling.java
@@ -1,7 +1,6 @@
package com.yahoo.vespa.hosted.provision.autoscale;
import com.yahoo.config.provision.ClusterResources;
-import com.yahoo.vespa.hosted.provision.applications.AutoscalingStatus;
import java.time.Instant;
import java.util.Objects;
@@ -14,17 +13,19 @@ import java.util.Optional;
*/
public class Autoscaling {
+ private final Status status;
+ private final String description;
private final Optional<ClusterResources> resources;
- private final AutoscalingStatus status;
private final Instant at;
- public Autoscaling(ClusterResources resources, AutoscalingStatus status, Instant at) {
- this(Optional.of(resources), status, at);
+ public Autoscaling(Status status, String description, ClusterResources resources, Instant at) {
+ this(status, description, Optional.of(resources), at);
}
- public Autoscaling(Optional<ClusterResources> resources, AutoscalingStatus status, Instant at) {
- this.resources = resources;
+ public Autoscaling(Status status, String description, Optional<ClusterResources> resources, Instant at) {
this.status = status;
+ this.description = description;
+ this.resources = resources;
this.at = at;
}
@@ -33,27 +34,30 @@ public class Autoscaling {
return resources;
}
- public AutoscalingStatus status() { return status; }
+ public Status status() { return status; }
+
+ public String description() { return description; }
/** Returns the time this target was decided. */
public Instant at() { return at; }
- public Autoscaling with(AutoscalingStatus status) {
- return new Autoscaling(resources, status, at);
+ public Autoscaling with(Status status, String description) {
+ return new Autoscaling(status, description, resources, at);
}
@Override
public boolean equals(Object o) {
if ( ! (o instanceof Autoscaling other)) return false;
- if ( ! this.resources.equals(other.resources)) return false;
if ( ! this.status.equals(other.status)) return false;
+ if ( ! this.description.equals(other.description)) return false;
+ if ( ! this.resources.equals(other.resources)) return false;
if ( ! this.at.equals(other.at)) return false;
return true;
}
@Override
public int hashCode() {
- return Objects.hash(resources, status, at);
+ return Objects.hash(status, description, at);
}
@Override
@@ -61,21 +65,41 @@ public class Autoscaling {
return "autoscaling to " + resources + ", made at " + at;
}
- public static Autoscaling empty() { return new Autoscaling(Optional.empty(), AutoscalingStatus.empty(), Instant.EPOCH); }
+ public static Autoscaling empty() { return new Autoscaling(Status.unavailable, "", Optional.empty(), Instant.EPOCH); }
- public static Autoscaling none(AutoscalingStatus.Status status, String description, Instant at) {
- return new Autoscaling(Optional.empty(), new AutoscalingStatus(status, description), at);
+ public static Autoscaling dontScale(Status status, String description, Instant at) {
+ return new Autoscaling(status, description, Optional.empty(), at);
}
- public static Autoscaling dontScale(AutoscalingStatus.Status status, String description, Instant at) {
- return new Autoscaling(Optional.empty(), new AutoscalingStatus(status, description), at);
+ public static Autoscaling ideal(Instant at) {
+ return new Autoscaling(Status.ideal, "Cluster is ideally scaled within configured limits",
+ Optional.empty(), at);
}
public static Autoscaling scaleTo(ClusterResources target, Instant at) {
- return new Autoscaling(Optional.of(target),
- new AutoscalingStatus(AutoscalingStatus.Status.rescaling,
- "Rescaling initiated due to load changes"),
+ return new Autoscaling(Status.rescaling,
+ "Rescaling initiated due to load changes",
+ Optional.of(target),
at);
}
+ public enum Status {
+
+ /** No status is available: Aautoscaling is disabled, or a brand new application. */
+ unavailable,
+
+ /** Autoscaling is not taking any action at the moment due to recent changes or a lack of data */
+ waiting,
+
+ /** The cluster is ideally scaled to the current load */
+ ideal,
+
+ /** The cluster should be rescaled further, but no better configuration is allowed by the current limits */
+ insufficient,
+
+ /** Rescaling of this cluster has been scheduled */
+ rescaling
+
+ };
+
}
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) {
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/ApplicationSerializer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/ApplicationSerializer.java
index 7842709912f..3733eb69e2e 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/ApplicationSerializer.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/ApplicationSerializer.java
@@ -10,7 +10,6 @@ import com.yahoo.slime.ObjectTraverser;
import com.yahoo.slime.Slime;
import com.yahoo.slime.SlimeUtils;
import com.yahoo.vespa.hosted.provision.applications.Application;
-import com.yahoo.vespa.hosted.provision.applications.AutoscalingStatus;
import com.yahoo.vespa.hosted.provision.applications.Cluster;
import com.yahoo.vespa.hosted.provision.applications.ScalingEvent;
import com.yahoo.vespa.hosted.provision.applications.Status;
@@ -137,8 +136,8 @@ public class ApplicationSerializer {
private static void toSlime(Autoscaling autoscaling, Cursor autoscalingObject) {
autoscaling.resources().ifPresent(resources -> toSlime(resources, autoscalingObject.setObject(resourcesKey)));
autoscalingObject.setLong(atKey, autoscaling.at().toEpochMilli());
- autoscalingObject.setString(statusKey, toAutoscalingStatusCode(autoscaling.status().status()));
- autoscalingObject.setString(descriptionKey, autoscaling.status().description());
+ autoscalingObject.setString(statusKey, toAutoscalingStatusCode(autoscaling.status()));
+ autoscalingObject.setString(descriptionKey, autoscaling.description());
}
private static void toSlime(ClusterResources resources, Cursor clusterResourcesObject) {
@@ -162,20 +161,23 @@ public class ApplicationSerializer {
Inspector legacyAutoscalingStatusObject) {
if ( ! autoscalingObject.valid()) return Autoscaling.empty();
- if ( ! autoscalingObject.field(atKey).valid()) { // TODO: Remove clause after January 2023
- return new Autoscaling(optionalClusterResourcesFromSlime(autoscalingObject),
- autoscalingStatusFromSlime(legacyAutoscalingStatusObject),
+ if ( ! autoscalingObject.field(atKey).valid()) { // TODO: Remove after January 2023
+ return new Autoscaling(fromAutoscalingStatusCode(legacyAutoscalingStatusObject.field(statusKey).asString()),
+ legacyAutoscalingStatusObject.field(descriptionKey).asString(),
+ optionalClusterResourcesFromSlime(autoscalingObject),
Instant.EPOCH);
}
- if (legacyAutoscalingStatusObject.valid()) { // TODO: Remove clause after January 2023
- return new Autoscaling(optionalClusterResourcesFromSlime(autoscalingObject.field(resourcesKey)),
- autoscalingStatusFromSlime(legacyAutoscalingStatusObject),
+ if (legacyAutoscalingStatusObject.valid()) { // TODO: Remove after January 2023
+ return new Autoscaling(fromAutoscalingStatusCode(legacyAutoscalingStatusObject.field(statusKey).asString()),
+ legacyAutoscalingStatusObject.field(descriptionKey).asString(),
+ optionalClusterResourcesFromSlime(autoscalingObject.field(resourcesKey)),
Instant.ofEpochMilli(autoscalingObject.field(atKey).asLong()));
}
- return new Autoscaling(optionalClusterResourcesFromSlime(autoscalingObject.field(resourcesKey)),
- autoscalingStatusFromSlime(autoscalingObject),
+ return new Autoscaling(fromAutoscalingStatusCode(autoscalingObject.field(statusKey).asString()),
+ autoscalingObject.field(descriptionKey).asString(),
+ optionalClusterResourcesFromSlime(autoscalingObject.field(resourcesKey)),
Instant.ofEpochMilli(autoscalingObject.field(atKey).asLong()));
}
@@ -203,13 +205,7 @@ public class ApplicationSerializer {
optionalInstant(inspector.field(completionKey)));
}
- private static AutoscalingStatus autoscalingStatusFromSlime(Inspector object) {
- if ( ! object.valid()) return AutoscalingStatus.empty();
- return new AutoscalingStatus(fromAutoscalingStatusCode(object.field(statusKey).asString()),
- object.field(descriptionKey).asString());
- }
-
- private static String toAutoscalingStatusCode(AutoscalingStatus.Status status) {
+ private static String toAutoscalingStatusCode(Autoscaling.Status status) {
return switch (status) {
case unavailable -> "unavailable";
case waiting -> "waiting";
@@ -219,13 +215,14 @@ public class ApplicationSerializer {
};
}
- private static AutoscalingStatus.Status fromAutoscalingStatusCode(String code) {
+ private static Autoscaling.Status fromAutoscalingStatusCode(String code) {
return switch (code) {
- case "unavailable" -> AutoscalingStatus.Status.unavailable;
- case "waiting" -> AutoscalingStatus.Status.waiting;
- case "ideal" -> AutoscalingStatus.Status.ideal;
- case "insufficient" -> AutoscalingStatus.Status.insufficient;
- case "rescaling" -> AutoscalingStatus.Status.rescaling;
+ case "" -> Autoscaling.Status.unavailable;
+ case "unavailable" -> Autoscaling.Status.unavailable;
+ case "waiting" -> Autoscaling.Status.waiting;
+ case "ideal" -> Autoscaling.Status.ideal;
+ case "insufficient" -> Autoscaling.Status.insufficient;
+ case "rescaling" -> Autoscaling.Status.rescaling;
default -> throw new IllegalArgumentException("Unknown autoscaling status '" + code + "'");
};
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/Activator.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/Activator.java
index b41796a2203..788dabc0949 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/Activator.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/Activator.java
@@ -13,8 +13,8 @@ import com.yahoo.vespa.hosted.provision.NodeList;
import com.yahoo.vespa.hosted.provision.NodeMutex;
import com.yahoo.vespa.hosted.provision.NodeRepository;
import com.yahoo.vespa.hosted.provision.applications.Application;
-import com.yahoo.vespa.hosted.provision.applications.AutoscalingStatus;
import com.yahoo.vespa.hosted.provision.applications.ScalingEvent;
+import com.yahoo.vespa.hosted.provision.autoscale.Autoscaling;
import com.yahoo.vespa.hosted.provision.node.Agent;
import com.yahoo.vespa.hosted.provision.node.Allocation;
@@ -120,8 +120,7 @@ class Activator {
}
if (cluster.target().resources().isPresent()
&& cluster.target().resources().get().justNumbers().equals(currentResources.justNumbers())) {
- cluster = cluster.withTarget(cluster.target().with(new AutoscalingStatus(AutoscalingStatus.Status.ideal,
- "Cluster is ideally scaled within configured limits")));
+ cluster = cluster.withTarget(Autoscaling.ideal(nodeRepository.clock().instant()));
}
if (cluster != modified.cluster(clusterEntry.getKey()).get())
modified = modified.with(cluster);
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/ApplicationSerializer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/ApplicationSerializer.java
index 85277a9cb4e..afec4106388 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/ApplicationSerializer.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/ApplicationSerializer.java
@@ -81,8 +81,8 @@ public class ApplicationSerializer {
cluster.target().resources().ifPresent(target -> toSlime(target, clusterObject.setObject("target")));
clusterModel.ifPresent(model -> clusterUtilizationToSlime(model, clusterObject.setObject("utilization")));
scalingEventsToSlime(cluster.scalingEvents(), clusterObject.setArray("scalingEvents"));
- clusterObject.setString("autoscalingStatusCode", cluster.target().status().status().name());
- clusterObject.setString("autoscalingStatus", cluster.target().status().description());
+ clusterObject.setString("autoscalingStatusCode", cluster.target().status().name());
+ clusterObject.setString("autoscalingStatus", cluster.target().description());
clusterModel.ifPresent(model -> clusterObject.setLong("scalingDuration", model.scalingDuration().toMillis()));
clusterModel.ifPresent(model -> clusterObject.setDouble("maxQueryGrowthRate", model.maxQueryGrowthRate()));
clusterModel.ifPresent(model -> clusterObject.setDouble("currentQueryFractionOfMax", model.queryFractionOfMax()));
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java
index b7d0ab8be26..e53a67bd5d4 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java
@@ -28,7 +28,6 @@ import com.yahoo.vespa.hosted.provision.Node;
import com.yahoo.vespa.hosted.provision.NodeMutex;
import com.yahoo.vespa.hosted.provision.NodeRepository;
import com.yahoo.vespa.hosted.provision.applications.Application;
-import com.yahoo.vespa.hosted.provision.applications.AutoscalingStatus;
import com.yahoo.vespa.hosted.provision.applications.Cluster;
import com.yahoo.vespa.hosted.provision.autoscale.Autoscaling;
import com.yahoo.vespa.hosted.provision.autoscale.MemoryMetricsDb;
@@ -197,13 +196,15 @@ public class MockNodeRepository extends NodeRepository {
null), app1Id, provisioner);
Application app1 = applications().get(app1Id).get();
Cluster cluster1 = app1.cluster(cluster1Id.id()).get();
- cluster1 = cluster1.withSuggested(new Autoscaling(new ClusterResources(6, 2,
+ cluster1 = cluster1.withSuggested(new Autoscaling(Autoscaling.Status.unavailable,
+ "",
+ new ClusterResources(6, 2,
new NodeResources(3, 20, 100, 1)),
- AutoscalingStatus.empty(),
clock().instant()));
- cluster1 = cluster1.withTarget(new Autoscaling(new ClusterResources(4, 1,
+ cluster1 = cluster1.withTarget(new Autoscaling(Autoscaling.Status.unavailable,
+ "",
+ new ClusterResources(4, 1,
new NodeResources(3, 16, 100, 1)),
- AutoscalingStatus.empty(),
clock().instant()));
try (Mutex lock = applications().lock(app1Id)) {
applications().put(app1.with(cluster1), lock);
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 60f13cc4b28..077675b4f0d 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
@@ -12,7 +12,6 @@ import static com.yahoo.config.provision.NodeResources.DiskSpeed.slow;
import com.yahoo.config.provision.NodeResources.StorageType;
import com.yahoo.config.provision.RegionName;
import com.yahoo.config.provision.Zone;
-import com.yahoo.vespa.hosted.provision.applications.AutoscalingStatus;
import com.yahoo.vespa.hosted.provision.provisioning.CapacityPolicies;
import org.junit.Test;
@@ -37,7 +36,7 @@ public class AutoscalingTest {
fixture.autoscale());
fixture.deploy(Capacity.from(scaledResources));
- assertEquals("Cluster in flux -> No further change", AutoscalingStatus.Status.waiting, fixture.autoscale().status().status());
+ assertEquals("Cluster in flux -> No further change", Autoscaling.Status.waiting, fixture.autoscale().status());
fixture.deactivateRetired(Capacity.from(scaledResources));
@@ -360,7 +359,7 @@ public class AutoscalingTest {
fixture.tester().clock().advance(Duration.ofDays(1));
fixture.loader().applyCpuLoad(0.25, 120);
- assertEquals(AutoscalingStatus.Status.unavailable, fixture.autoscale().status().status());
+ assertEquals(Autoscaling.Status.unavailable, fixture.autoscale().status());
}
@Test
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/ApplicationSerializerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/ApplicationSerializerTest.java
index 5d92635aa21..9c48b3d6d4f 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/ApplicationSerializerTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/ApplicationSerializerTest.java
@@ -2,12 +2,10 @@
package com.yahoo.vespa.hosted.provision.persistence;
import com.yahoo.config.provision.ApplicationId;
-import com.yahoo.config.provision.Capacity;
import com.yahoo.config.provision.ClusterResources;
import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.config.provision.NodeResources;
import com.yahoo.vespa.hosted.provision.applications.Application;
-import com.yahoo.vespa.hosted.provision.applications.AutoscalingStatus;
import com.yahoo.vespa.hosted.provision.applications.Cluster;
import com.yahoo.vespa.hosted.provision.applications.ScalingEvent;
import com.yahoo.vespa.hosted.provision.applications.Status;
@@ -45,13 +43,15 @@ public class ApplicationSerializerTest {
new ClusterResources( 8, 4, minResources),
new ClusterResources(14, 7, new NodeResources(3, 6, 21, 24)),
false,
- new Autoscaling(new ClusterResources(20, 10,
+ new Autoscaling(Autoscaling.Status.unavailable,
+ "",
+ new ClusterResources(20, 10,
new NodeResources(0.5, 4, 14, 16)),
- AutoscalingStatus.empty(),
Instant.ofEpochMilli(1234L)),
- new Autoscaling(new ClusterResources(10, 5,
+ new Autoscaling(Autoscaling.Status.insufficient,
+ "Autoscaling status",
+ new ClusterResources(10, 5,
new NodeResources(2, 4, 14, 16)),
- new AutoscalingStatus(AutoscalingStatus.Status.insufficient, "Autoscaling status"),
Instant.ofEpochMilli(5678L)),
List.of(new ScalingEvent(new ClusterResources(10, 5, minResources),
new ClusterResources(12, 6, minResources),