aboutsummaryrefslogtreecommitdiffstats
path: root/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence
diff options
context:
space:
mode:
authorOla Aunronning <olaa@yahooinc.com>2024-01-12 16:22:01 +0100
committerOla Aunronning <olaa@yahooinc.com>2024-01-12 16:22:01 +0100
commite6f30b96ad5e1d32be4aa29db4c526f5ece50625 (patch)
tree9f5a1c9503d8e940a7141aa3dbdda87d2141cb37 /node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence
parentf2ded8dd8ebfc2c567fffea98b5e750ab1ed0da1 (diff)
Store multiple resource suggestions
Diffstat (limited to 'node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/ApplicationSerializer.java18
1 files changed, 18 insertions, 0 deletions
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 6f325700401..7aee0610051 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
@@ -6,6 +6,7 @@ import com.yahoo.config.provision.IntRange;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.ClusterResources;
import com.yahoo.config.provision.ClusterSpec;
+import com.yahoo.slime.ArrayTraverser;
import com.yahoo.slime.Cursor;
import com.yahoo.slime.Inspector;
import com.yahoo.slime.ObjectTraverser;
@@ -56,6 +57,7 @@ public class ApplicationSerializer {
private static final String groupSizeKey = "groupSize";
private static final String requiredKey = "required";
private static final String suggestedKey = "suggested";
+ private static final String suggestionsKey = "suggestionsKey";
private static final String clusterInfoKey = "clusterInfo";
private static final String bcpDeadlineKey = "bcpDeadline";
private static final String hostTTLKey = "hostTTL";
@@ -140,6 +142,7 @@ public class ApplicationSerializer {
toSlime(cluster.groupSize(), clusterObject.setObject(groupSizeKey));
clusterObject.setBool(requiredKey, cluster.required());
toSlime(cluster.suggested(), clusterObject.setObject(suggestedKey));
+ toSlime(cluster.suggestions(), clusterObject.setArray(suggestionsKey));
toSlime(cluster.target(), clusterObject.setObject(targetKey));
if (! cluster.clusterInfo().isEmpty())
toSlime(cluster.clusterInfo(), clusterObject.setObject(clusterInfoKey));
@@ -156,12 +159,20 @@ public class ApplicationSerializer {
intRangeFromSlime(clusterObject.field(groupSizeKey)),
clusterObject.field(requiredKey).asBool(),
autoscalingFromSlime(clusterObject.field(suggestedKey)),
+ suggestionsFromSlime(clusterObject.field(suggestionsKey)),
autoscalingFromSlime(clusterObject.field(targetKey)),
clusterInfoFromSlime(clusterObject.field(clusterInfoKey)),
bcpGroupInfoFromSlime(clusterObject.field(bcpGroupInfoKey)),
scalingEventsFromSlime(clusterObject.field(scalingEventsKey)));
}
+ private static void toSlime(List<Autoscaling> suggestions, Cursor suggestionsArray) {
+ suggestions.forEach(suggestion -> {
+ var suggestionObject = suggestionsArray.addObject();
+ toSlime(suggestion, suggestionObject);
+ });
+ }
+
private static void toSlime(Autoscaling autoscaling, Cursor autoscalingObject) {
autoscalingObject.setString(statusKey, toAutoscalingStatusCode(autoscaling.status()));
autoscalingObject.setString(descriptionKey, autoscaling.description());
@@ -227,6 +238,13 @@ public class ApplicationSerializer {
metricsObject.field(cpuCostPerQueryKey).asDouble());
}
+ private static List<Autoscaling> suggestionsFromSlime(Inspector suggestionsObject) {
+ var suggestions = new ArrayList<Autoscaling>();
+ if (!suggestionsObject.valid()) return suggestions;
+ suggestionsObject.traverse((ArrayTraverser) (id, suggestion) -> suggestions.add(autoscalingFromSlime(suggestion)));
+ return suggestions;
+ }
+
private static Autoscaling autoscalingFromSlime(Inspector autoscalingObject) {
if ( ! autoscalingObject.valid()) return Autoscaling.empty();