diff options
7 files changed, 47 insertions, 8 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/ConfigServer.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/ConfigServer.java index 23a9ca79b53..d1db863c2d9 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/ConfigServer.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/ConfigServer.java @@ -133,4 +133,7 @@ public interface ConfigServer { boolean isTesterReady(DeploymentId deployment); Optional<TestReport> getTestReport(DeploymentId deployment); + + /** Get maximum resources consumed */ + QuotaUsage getQuotaUsage(DeploymentId deploymentId); } diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/QuotaUsage.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/QuotaUsage.java new file mode 100644 index 00000000000..842b627f5da --- /dev/null +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/QuotaUsage.java @@ -0,0 +1,11 @@ +package com.yahoo.vespa.hosted.controller.api.integration.configserver; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +/** + * @author ogronnesby + */ +@JsonIgnoreProperties(ignoreUnknown = true) +public class QuotaUsage { + public double rate; +} diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java index a6c177230d7..f5a04d971a0 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java @@ -52,6 +52,7 @@ import com.yahoo.vespa.hosted.controller.application.ApplicationPackage; import com.yahoo.vespa.hosted.controller.application.ApplicationPackageValidator; import com.yahoo.vespa.hosted.controller.application.Deployment; import com.yahoo.vespa.hosted.controller.application.DeploymentMetrics; +import com.yahoo.vespa.hosted.controller.application.QuotaUsage; import com.yahoo.vespa.hosted.controller.application.SystemApplication; import com.yahoo.vespa.hosted.controller.application.TenantAndApplicationId; import com.yahoo.vespa.hosted.controller.athenz.impl.AthenzFacade; @@ -357,7 +358,8 @@ public class ApplicationController { lockApplicationOrThrow(applicationId, application -> store(application.with(job.application().instance(), instance -> instance.withNewDeployment(zone, revision, platform, - clock.instant(), warningsFrom(result))))); + clock.instant(), warningsFrom(result), + QuotaUsage.create(result.quotaUsageRate()))))); return result; } } @@ -432,7 +434,8 @@ public class ApplicationController { lockApplicationOrThrow(applicationId, application -> store(application.with(instanceId.instance(), instance -> instance.withNewDeployment(zone, applicationVersion, platformVersion, - clock.instant(), warningsFrom(result))))); + clock.instant(), warningsFrom(result), + QuotaUsage.create(result.quotaUsageRate()))))); return result; } } @@ -543,8 +546,11 @@ public class ApplicationController { configServer.deploy(new DeploymentData(application, zone, applicationPackage.zippedContent(), platform, endpoints, endpointCertificateMetadata, dockerImageRepo, domain, applicationRoles, quota, internalRestart)); + + var quotaUsage = configServer.getQuotaUsage(new DeploymentId(application, zone)); + return new ActivateResult(new RevisionId(applicationPackage.hash()), preparedApplication.prepareResponse(), - applicationPackage.zippedContent().length); + applicationPackage.zippedContent().length, quotaUsage.rate); } finally { // Even if prepare fails, a load balancer may have been provisioned. Always refresh routing policies so that // any DNS updates can be propagated as early as possible. @@ -561,7 +567,7 @@ public class ApplicationController { PrepareResponse prepareResponse = new PrepareResponse(); prepareResponse.log = List.of(logEntry); prepareResponse.configChangeActions = new ConfigChangeActions(List.of(), List.of()); - return new ActivateResult(new RevisionId("0"), prepareResponse, 0); + return new ActivateResult(new RevisionId("0"), prepareResponse, 0, 0.0); } private LockedApplication withoutDeletedDeployments(LockedApplication application, InstanceName instance) { diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Instance.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Instance.java index 243566c72bd..e2ff017caac 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Instance.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Instance.java @@ -13,6 +13,7 @@ import com.yahoo.vespa.hosted.controller.application.AssignedRotation; import com.yahoo.vespa.hosted.controller.application.Change; import com.yahoo.vespa.hosted.controller.application.Deployment; import com.yahoo.vespa.hosted.controller.application.DeploymentMetrics; +import com.yahoo.vespa.hosted.controller.application.QuotaUsage; import com.yahoo.vespa.hosted.controller.rotation.RotationStatus; import java.time.Instant; @@ -62,14 +63,14 @@ public class Instance { } public Instance withNewDeployment(ZoneId zone, ApplicationVersion applicationVersion, Version version, - Instant instant, Map<DeploymentMetrics.Warning, Integer> warnings) { + Instant instant, Map<DeploymentMetrics.Warning, Integer> warnings, QuotaUsage quotaUsage) { // Use info from previous deployment if available, otherwise create a new one. Deployment previousDeployment = deployments.getOrDefault(zone, new Deployment(zone, applicationVersion, version, instant)); Deployment newDeployment = new Deployment(zone, applicationVersion, version, instant, previousDeployment.metrics().with(warnings), previousDeployment.activity(), - previousDeployment.quota()); + quotaUsage); return with(newDeployment); } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/api/ActivateResult.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/api/ActivateResult.java index a890c50a0af..e6c9e52ff69 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/api/ActivateResult.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/api/ActivateResult.java @@ -13,11 +13,13 @@ public class ActivateResult { private final RevisionId revisionId; private final PrepareResponse prepareResponse; private final long applicationZipSizeBytes; + private final double quotaUsageRate; - public ActivateResult(RevisionId revisionId, PrepareResponse prepareResponse, long applicationZipSizeBytes) { + public ActivateResult(RevisionId revisionId, PrepareResponse prepareResponse, long applicationZipSizeBytes, double quotaUsageRate) { this.revisionId = revisionId; this.prepareResponse = prepareResponse; this.applicationZipSizeBytes = applicationZipSizeBytes; + this.quotaUsageRate = quotaUsageRate; } public long applicationZipSizeBytes() { @@ -32,4 +34,8 @@ public class ActivateResult { return prepareResponse; } + public double quotaUsageRate() { + return quotaUsageRate; + } + } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/QuotaUsage.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/QuotaUsage.java index 39309ca3fcf..8851c6ae409 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/QuotaUsage.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/QuotaUsage.java @@ -11,7 +11,7 @@ public class QuotaUsage { private final double rate; - public QuotaUsage(double rate) { + private QuotaUsage(double rate) { this.rate = rate; } @@ -26,6 +26,10 @@ public class QuotaUsage { return new QuotaUsage(rate.getAsDouble()); } + public static QuotaUsage create(double rate) { + return new QuotaUsage(rate); + } + @Override public String toString() { return "QuotaUsage{" + diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ConfigServerMock.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ConfigServerMock.java index 85e456afa60..a598c5d30e0 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ConfigServerMock.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ConfigServerMock.java @@ -31,6 +31,7 @@ import com.yahoo.vespa.hosted.controller.api.integration.configserver.Node; import com.yahoo.vespa.hosted.controller.api.integration.configserver.NotFoundException; import com.yahoo.vespa.hosted.controller.api.integration.configserver.PrepareResponse; import com.yahoo.vespa.hosted.controller.api.integration.configserver.ProxyResponse; +import com.yahoo.vespa.hosted.controller.api.integration.configserver.QuotaUsage; import com.yahoo.vespa.hosted.controller.api.integration.configserver.ServiceConvergence; import com.yahoo.vespa.hosted.controller.api.integration.deployment.TestReport; import com.yahoo.vespa.hosted.controller.api.integration.deployment.TesterCloud; @@ -532,6 +533,13 @@ public class ConfigServerMock extends AbstractComponent implements ConfigServer return Collections.singletonList("music"); } + @Override + public QuotaUsage getQuotaUsage(DeploymentId deploymentId) { + var q = new QuotaUsage(); + q.rate = 42.42; + return q; + } + public static class Application { private final ApplicationId id; |