diff options
author | Jon Bratseth <bratseth@gmail.com> | 2023-02-15 13:52:23 +0100 |
---|---|---|
committer | Jon Bratseth <bratseth@gmail.com> | 2023-02-15 13:52:23 +0100 |
commit | 4c9206d8119d1131e248419c7e1ba669c396b89b (patch) | |
tree | 414dfdc40c088e06c108e28a7f050bf375ce9d3b /controller-api | |
parent | b9b7e3cf8529e6f7e9904c1013174e37c0460696 (diff) |
Exchange BCP info WIP
Diffstat (limited to 'controller-api')
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); + } + +} |