summaryrefslogtreecommitdiffstats
path: root/controller-api
diff options
context:
space:
mode:
authorØyvind Grønnesby <oyving@verizonmedia.com>2020-10-27 09:33:32 +0100
committerGitHub <noreply@github.com>2020-10-27 09:33:32 +0100
commit8d141c6e23668b7260260b17e09d68528cb53486 (patch)
tree70d4da8359d07045f2c1ce1ddbfdbf557155137b /controller-api
parent67aff4ae8112210c354a028b5dca5ddaa0f70d6e (diff)
parentc36b1bd081047f0e95c27cd38afac69ae880b158 (diff)
Merge pull request #15007 from vespa-engine/andreer/basic-quota-subtraction
andreer/basic quota subtraction
Diffstat (limited to 'controller-api')
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/model/DeploymentData.java6
-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.java9
4 files changed, 15 insertions, 8 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 2283bdce885..78f8197062c 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
@@ -31,7 +31,7 @@ public class DeploymentData {
private final Optional<DockerImage> dockerImageRepo;
private final Optional<AthenzDomain> athenzDomain;
private final Optional<ApplicationRoles> applicationRoles;
- private final Optional<Quota> quota;
+ private final Quota quota;
public DeploymentData(ApplicationId instance, ZoneId zone, byte[] applicationPackage, Version platform,
Set<ContainerEndpoint> containerEndpoints,
@@ -39,7 +39,7 @@ public class DeploymentData {
Optional<DockerImage> dockerImageRepo,
Optional<AthenzDomain> athenzDomain,
Optional<ApplicationRoles> applicationRoles,
- Optional<Quota> quota) {
+ Quota quota) {
this.instance = requireNonNull(instance);
this.zone = requireNonNull(zone);
this.applicationPackage = requireNonNull(applicationPackage);
@@ -88,7 +88,7 @@ public class DeploymentData {
return applicationRoles;
}
- public Optional<Quota> quota() {
+ public 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 646279ceaa0..2f05c99ab66 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
@@ -1,7 +1,6 @@
// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.hosted.controller.api.integration.billing;
-import com.yahoo.config.provision.Environment;
import com.yahoo.config.provision.TenantName;
import com.yahoo.vespa.hosted.controller.api.integration.user.User;
@@ -17,7 +16,7 @@ public interface BillingController {
PlanId getPlan(TenantName tenant);
- Optional<Quota> getQuota(TenantName tenant, Environment environment);
+ 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 5a5e8821429..4b09c744537 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
@@ -1,7 +1,6 @@
// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.hosted.controller.api.integration.billing;
-import com.yahoo.config.provision.Environment;
import com.yahoo.config.provision.TenantName;
import com.yahoo.vespa.hosted.controller.api.integration.user.User;
@@ -33,8 +32,8 @@ public class MockBillingController implements BillingController {
}
@Override
- public Optional<Quota> getQuota(TenantName tenant, Environment environment) {
- return Optional.of(Quota.unlimited().withMaxClusterSize(5));
+ public Quota getQuota(TenantName tenant) {
+ return Quota.unlimited().withMaxClusterSize(5);
}
@Override
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
index b8dadae6b7c..feedf1be04f 100644
--- 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
@@ -39,6 +39,10 @@ public class Quota {
return UNLIMITED;
}
+ public boolean isUnlimited() {
+ return budget.isEmpty() && maxClusterSize().isEmpty();
+ }
+
public Quota withBudget(BigDecimal budget) {
return new Quota(maxClusterSize, Optional.ofNullable(budget));
}
@@ -61,6 +65,11 @@ public class Quota {
return budget;
}
+ public Quota subtractUsage(double rate) {
+ if (budget().isEmpty()) return this; // (unlimited - rate) is still unlimited
+ return this.withBudget(budget().get().subtract(BigDecimal.valueOf(rate)));
+ }
+
@Override
public boolean equals(Object o) {
if (this == o) return true;