aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorØyvind Grønnesby <oyving@verizonmedia.com>2020-10-08 16:38:17 +0200
committerØyvind Grønnesby <oyving@verizonmedia.com>2020-10-08 16:38:17 +0200
commitda32182eeb75a797e7ac12d8db415cdabe987661 (patch)
tree96a462bb851ff529b1b556ed8ee7f53f59edb049
parentb0ab9ed9ebc8908b9fec91d26119d4bc270a07c0 (diff)
Query for quota usage on deploy
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/ConfigServer.java3
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/QuotaUsage.java11
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java14
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Instance.java5
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/api/ActivateResult.java8
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/QuotaUsage.java6
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ConfigServerMock.java8
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;