diff options
author | Øyvind Grønnesby <oyving@verizonmedia.com> | 2020-10-27 09:33:32 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-27 09:33:32 +0100 |
commit | 8d141c6e23668b7260260b17e09d68528cb53486 (patch) | |
tree | 70d4da8359d07045f2c1ce1ddbfdbf557155137b /controller-api | |
parent | 67aff4ae8112210c354a028b5dca5ddaa0f70d6e (diff) | |
parent | c36b1bd081047f0e95c27cd38afac69ae880b158 (diff) |
Merge pull request #15007 from vespa-engine/andreer/basic-quota-subtraction
andreer/basic quota subtraction
Diffstat (limited to 'controller-api')
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; |