aboutsummaryrefslogtreecommitdiffstats
path: root/controller-api
diff options
context:
space:
mode:
authorAndreas Eriksen <andreer@verizonmedia.com>2020-08-26 09:03:10 +0200
committerGitHub <noreply@github.com>2020-08-26 09:03:10 +0200
commita0497ac0892be9f8372d5814cead725f656d29b7 (patch)
treefdd33c21a0239be47ea985f4e1640479e7084a5b /controller-api
parent4746dcd27ad567eb6f00adf773e9ac8fd55ffd35 (diff)
pass quota from plans to configserver (overridable by feature flag) (#14087)
* pass quota from plans to configserver (overridable by feature flag) * make quota optional
Diffstat (limited to 'controller-api')
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/model/DeploymentData.java10
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingController.java3
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/MockBillingController.java5
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/Quota.java32
4 files changed, 48 insertions, 2 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/model/DeploymentData.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/model/DeploymentData.java
index a74d1f34da0..717a4296b81 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/model/DeploymentData.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/model/DeploymentData.java
@@ -6,6 +6,7 @@ import com.yahoo.config.provision.DockerImage;
import com.yahoo.config.provision.zone.ZoneId;
import com.yahoo.vespa.athenz.api.AthenzDomain;
import com.yahoo.vespa.hosted.controller.api.integration.aws.ApplicationRoles;
+import com.yahoo.vespa.hosted.controller.api.integration.billing.Quota;
import com.yahoo.vespa.hosted.controller.api.integration.certificates.EndpointCertificateMetadata;
import com.yahoo.vespa.hosted.controller.api.integration.configserver.ContainerEndpoint;
@@ -30,13 +31,15 @@ public class DeploymentData {
private final Optional<DockerImage> dockerImageRepo;
private final Optional<AthenzDomain> athenzDomain;
private final Optional<ApplicationRoles> applicationRoles;
+ private final Optional<Quota> quota;
public DeploymentData(ApplicationId instance, ZoneId zone, byte[] applicationPackage, Version platform,
Set<ContainerEndpoint> containerEndpoints,
Optional<EndpointCertificateMetadata> endpointCertificateMetadata,
Optional<DockerImage> dockerImageRepo,
Optional<AthenzDomain> athenzDomain,
- Optional<ApplicationRoles> applicationRoles) {
+ Optional<ApplicationRoles> applicationRoles,
+ Optional<Quota> quota) {
this.instance = requireNonNull(instance);
this.zone = requireNonNull(zone);
this.applicationPackage = requireNonNull(applicationPackage);
@@ -46,6 +49,7 @@ public class DeploymentData {
this.dockerImageRepo = requireNonNull(dockerImageRepo);
this.athenzDomain = athenzDomain;
this.applicationRoles = applicationRoles;
+ this.quota = quota;
}
public ApplicationId instance() {
@@ -83,4 +87,8 @@ public class DeploymentData {
public Optional<ApplicationRoles> applicationRoles() {
return applicationRoles;
}
+
+ public Optional<Quota> quota() {
+ return quota;
+ }
}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingController.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingController.java
index a21c9f2a40e..c5b548b8e6c 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingController.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingController.java
@@ -2,7 +2,6 @@
package com.yahoo.vespa.hosted.controller.api.integration.billing;
import com.yahoo.config.provision.TenantName;
-import com.yahoo.vespa.hosted.controller.api.identifiers.DeploymentId;
import com.yahoo.vespa.hosted.controller.api.integration.user.User;
import java.math.BigDecimal;
@@ -17,6 +16,8 @@ public interface BillingController {
PlanId getPlan(TenantName tenant);
+ Optional<Quota> getQuota(TenantName tenant);
+
/**
* @return String containing error message if something went wrong. Empty otherwise
*/
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/MockBillingController.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/MockBillingController.java
index 24259a94ccf..62d32b1e848 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/MockBillingController.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/MockBillingController.java
@@ -31,6 +31,11 @@ public class MockBillingController implements BillingController {
}
@Override
+ public Optional<Quota> getQuota(TenantName tenant) {
+ return Optional.of(new Quota(5));
+ }
+
+ @Override
public PlanResult setPlan(TenantName tenant, PlanId planId, boolean hasDeployments) {
plans.put(tenant, planId);
return PlanResult.success();
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/Quota.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/Quota.java
new file mode 100644
index 00000000000..6f162a8275e
--- /dev/null
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/Quota.java
@@ -0,0 +1,32 @@
+package com.yahoo.vespa.hosted.controller.api.integration.billing;
+
+import java.util.Objects;
+
+/**
+ * Quota information transmitted to the configserver on deploy.
+ */
+public class Quota {
+
+ private final int maxClusterSize;
+
+ public Quota(int maxClusterSize) {
+ this.maxClusterSize = maxClusterSize;
+ }
+
+ public int maxClusterSize() {
+ return maxClusterSize;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ Quota quota = (Quota) o;
+ return maxClusterSize == quota.maxClusterSize;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(maxClusterSize);
+ }
+}