summaryrefslogtreecommitdiffstats
path: root/controller-api
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2023-02-15 13:52:23 +0100
committerJon Bratseth <bratseth@gmail.com>2023-02-15 13:52:23 +0100
commit4c9206d8119d1131e248419c7e1ba669c396b89b (patch)
tree414dfdc40c088e06c108e28a7f050bf375ce9d3b /controller-api
parentb9b7e3cf8529e6f7e9904c1013174e37c0460696 (diff)
Exchange BCP info WIP
Diffstat (limited to 'controller-api')
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/Cluster.java18
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepository.java8
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/ApplicationPatch.java49
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/AutoscalingData.java9
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/AutoscalingMetricsData.java28
5 files changed, 95 insertions, 17 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/Cluster.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/Cluster.java
index 788c1ea878b..401df704313 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/Cluster.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/Cluster.java
@@ -127,15 +127,17 @@ public class Cluster {
private final Instant at;
private final Load peak;
private final Load ideal;
+ private final Metrics metrics;
public Autoscaling(String status, String description, Optional<ClusterResources> resources, Instant at,
- Load peak, Load ideal) {
+ Load peak, Load ideal, Metrics metrics) {
this.status = status;
this.description = description;
this.resources = resources;
this.at = at;
this.peak = peak;
this.ideal = ideal;
+ this.metrics = metrics;
}
public String status() {return status;}
@@ -146,6 +148,7 @@ public class Cluster {
public Instant at() {return at;}
public Load peak() {return peak;}
public Load ideal() {return ideal;}
+ public Metrics metrics() { return metrics; }
@Override
public boolean equals(Object o) {
@@ -156,6 +159,7 @@ public class Cluster {
if (!this.at.equals(other.at)) return false;
if (!this.peak.equals(other.peak)) return false;
if (!this.ideal.equals(other.ideal)) return false;
+ if (!this.metrics.equals(other.metrics)) return false;
return true;
}
@@ -176,7 +180,17 @@ public class Cluster {
Optional.empty(),
Instant.EPOCH,
Load.zero(),
- Load.zero());
+ Load.zero(),
+ Metrics.zero());
+ }
+
+ // Used to create BcpGroupInfo
+ public record Metrics(double queryRate, double growthRateHeadroom, double cpuCostPerQuery) {
+
+ public static Metrics zero() {
+ return new Metrics(0, 0, 0);
+ }
+
}
}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepository.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepository.java
index a65b35b4dbe..1768de8d012 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepository.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepository.java
@@ -7,7 +7,12 @@ import com.yahoo.config.provision.HostName;
import com.yahoo.config.provision.NodeType;
import com.yahoo.config.provision.TenantName;
import com.yahoo.config.provision.zone.ZoneId;
+import com.yahoo.vespa.hosted.controller.api.integration.noderepository.ApplicationPatch;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
import java.net.URI;
import java.util.List;
import java.util.Map;
@@ -38,8 +43,7 @@ public interface NodeRepository {
Application getApplication(ZoneId zone, ApplicationId application);
/** Update application */
- void patchApplication(ZoneId zone, ApplicationId application,
- double currentReadShare, double maxReadShare);
+ void patchApplication(ZoneId zone, ApplicationId application, ApplicationPatch patch);
/** Get node statistics such as cost and load from given zone */
NodeRepoStats getStats(ZoneId zone);
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/ApplicationPatch.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/ApplicationPatch.java
index 2bcdf6ef422..ca1736a86de 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/ApplicationPatch.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/ApplicationPatch.java
@@ -1,11 +1,13 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.hosted.controller.api.integration.noderepository;
-import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
+import java.util.HashMap;
+import java.util.Map;
+
/**
* Patchable data under Application
*
@@ -15,20 +17,43 @@ import com.fasterxml.jackson.annotation.JsonProperty;
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ApplicationPatch {
- @JsonProperty
- private final Double currentReadShare;
+ @JsonProperty("currentReadShare")
+ public Double currentReadShare;
+
+ @JsonProperty("maxReadShare")
+ public Double maxReadShare;
+
+ @JsonProperty("clusters")
+ public Map<String, ClusterPatch> clusters = new HashMap<>();
- @JsonProperty
- private final Double maxReadShare;
+ public static class ClusterPatch {
+
+ @JsonProperty("bcpGroupInfo")
+ public BcpGroupInfo bcpGroupInfo;
+
+ public ClusterPatch(BcpGroupInfo bcpGroupInfo) {
+ this.bcpGroupInfo = bcpGroupInfo;
+ }
- @JsonCreator
- public ApplicationPatch(@JsonProperty("currentReadShare") Double currentReadShare,
- @JsonProperty("maxReadShare") Double maxReadShare) {
- this.currentReadShare = currentReadShare;
- this.maxReadShare = maxReadShare;
}
- public Double getCurrentReadShare() { return currentReadShare; }
- public Double getMaxReadShare() { return maxReadShare; }
+ public static class BcpGroupInfo {
+
+ @JsonProperty("queryRate")
+ public Double queryRate;
+
+ @JsonProperty("growthRateHeadroom")
+ public Double growthRateHeadroom;
+
+ @JsonProperty("cpuCostPerQuery")
+ public Double cpuCostPerQuery;
+
+ public BcpGroupInfo(double queryRate, double growthRateHeadroom, double cpuCostPerQuery) {
+ this.queryRate = queryRate;
+ this.growthRateHeadroom = growthRateHeadroom;
+ this.cpuCostPerQuery = cpuCostPerQuery;
+ }
+
+ }
}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/AutoscalingData.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/AutoscalingData.java
index 3541799b0d0..e82db76831f 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/AutoscalingData.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/AutoscalingData.java
@@ -10,6 +10,9 @@ import java.time.Duration;
import java.time.Instant;
import java.util.Optional;
+/**
+ * @author bratseth
+ */
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class AutoscalingData {
@@ -32,13 +35,17 @@ public class AutoscalingData {
@JsonProperty("ideal")
public LoadData ideal;
+ @JsonProperty("metrics")
+ public AutoscalingMetricsData metrics;
+
public Cluster.Autoscaling toAutoscaling() {
return new Cluster.Autoscaling(status == null ? "" : status,
description == null ? "" : description,
resources == null ? Optional.empty() : Optional.ofNullable(resources.toClusterResources()),
at == null ? Instant.EPOCH : Instant.ofEpochMilli(at),
peak == null ? Load.zero() : peak.toLoad(),
- ideal == null ? Load.zero() : ideal.toLoad());
+ ideal == null ? Load.zero() : ideal.toLoad(),
+ metrics == null ? Cluster.Autoscaling.Metrics.zero() : metrics.toMetrics());
}
}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/AutoscalingMetricsData.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/AutoscalingMetricsData.java
new file mode 100644
index 00000000000..fddeea9ed2c
--- /dev/null
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/AutoscalingMetricsData.java
@@ -0,0 +1,28 @@
+package com.yahoo.vespa.hosted.controller.api.integration.noderepository;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.yahoo.vespa.hosted.controller.api.integration.configserver.Cluster;
+
+/**
+ * @author bratseth
+ */
+@JsonIgnoreProperties(ignoreUnknown = true)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class AutoscalingMetricsData {
+
+ @JsonProperty("queryRate")
+ public Double queryRate;
+
+ @JsonProperty("growthRateHeadroom")
+ public Double growthRateHeadroom;
+
+ @JsonProperty("cpuCostPerQuery")
+ public Double cpuCostPerQuery;
+
+ public Cluster.Autoscaling.Metrics toMetrics() {
+ return new Cluster.Autoscaling.Metrics(queryRate, growthRateHeadroom, cpuCostPerQuery);
+ }
+
+}