diff options
author | Øyvind Grønnesby <oyving@verizonmedia.com> | 2021-01-05 09:05:58 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-05 09:05:58 +0100 |
commit | 7f7328ac1a8ee82307ad5a4c9ae324776841f80d (patch) | |
tree | 5feec2a7d1f93ec9fdf24f3eb2fe91667c66b1ea /config-model | |
parent | aee8169ff21a049570b7423e100949d97d1c202a (diff) | |
parent | f4508f1dc3e5391b20e98ca0734498b0b9559016 (diff) |
Merge pull request #15897 from vespa-engine/ogronnesby/system-name-in-quota-message
Add system name to quota error message
Diffstat (limited to 'config-model')
2 files changed, 28 insertions, 9 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/QuotaValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/QuotaValidator.java index 8a4eabbd12c..2bb12654fc4 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/QuotaValidator.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/QuotaValidator.java @@ -4,6 +4,7 @@ package com.yahoo.vespa.model.application.validation; import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.provision.Capacity; import com.yahoo.config.provision.ClusterSpec; +import com.yahoo.config.provision.SystemName; import com.yahoo.vespa.model.VespaModel; import java.math.BigDecimal; @@ -22,10 +23,10 @@ public class QuotaValidator extends Validator { public void validate(VespaModel model, DeployState deployState) { var quota = deployState.getProperties().quota(); quota.maxClusterSize().ifPresent(maxClusterSize -> validateMaxClusterSize(maxClusterSize, model)); - quota.budgetAsDecimal().ifPresent(budget -> validateBudget(budget, model)); + quota.budgetAsDecimal().ifPresent(budget -> validateBudget(budget, model, deployState.getProperties().zone().system())); } - private void validateBudget(BigDecimal budget, VespaModel model) { + private void validateBudget(BigDecimal budget, VespaModel model, SystemName systemName) { var spend = model.provisioned().all().values().stream() .filter(Objects::nonNull) .map(Capacity::maxResources) @@ -33,7 +34,7 @@ public class QuotaValidator extends Validator { .sum(); if (budget.doubleValue() < spend) { - throwBudgetExceeded(spend, budget); + throwBudgetExceeded(spend, budget, systemName); } } @@ -56,8 +57,9 @@ public class QuotaValidator extends Validator { } } - private void throwBudgetExceeded(double spend, BigDecimal budget) { + private void throwBudgetExceeded(double spend, BigDecimal budget, SystemName systemName) { var message = String.format(Locale.US, "Hourly spend for maximum specified resources ($%.2f) exceeds budget from quota ($%.2f)!", spend, budget); - throw new IllegalArgumentException(message); + var messageWithSystem = (systemName.equals(SystemName.Public) ? "" : systemName.value() + ": ") + message; + throw new IllegalArgumentException(messageWithSystem); } } diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/QuotaValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/QuotaValidatorTest.java index 12f0c7013e5..d3c41754c8d 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/QuotaValidatorTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/QuotaValidatorTest.java @@ -4,6 +4,9 @@ package com.yahoo.vespa.model.application.validation; import com.yahoo.config.model.api.Quota; import com.yahoo.config.model.deploy.TestProperties; import com.yahoo.config.provision.Environment; +import com.yahoo.config.provision.RegionName; +import com.yahoo.config.provision.SystemName; +import com.yahoo.config.provision.Zone; import org.junit.Test; import java.math.BigDecimal; @@ -16,17 +19,19 @@ import static org.junit.Assert.fail; */ public class QuotaValidatorTest { + private final Zone publicZone = new Zone(SystemName.Public, Environment.prod, RegionName.from("foo")); + private final Zone publicCdZone = new Zone(SystemName.PublicCd, Environment.prod, RegionName.from("foo")); private final Quota quota = Quota.unlimited().withClusterSize(10).withBudget(BigDecimal.valueOf(1)); @Test public void test_deploy_under_quota() { - var tester = new ValidationTester(5, false, new TestProperties().setHostedVespa(true).setQuota(quota)); + var tester = new ValidationTester(5, false, new TestProperties().setHostedVespa(true).setQuota(quota).setZone(publicZone)); tester.deploy(null, getServices("testCluster", 5), Environment.prod, null); } @Test public void test_deploy_above_quota_clustersize() { - var tester = new ValidationTester(11, false, new TestProperties().setHostedVespa(true).setQuota(quota)); + var tester = new ValidationTester(11, false, new TestProperties().setHostedVespa(true).setQuota(quota).setZone(publicZone)); try { tester.deploy(null, getServices("testCluster", 11), Environment.prod, null); fail(); @@ -37,13 +42,25 @@ public class QuotaValidatorTest { @Test public void test_deploy_above_quota_budget() { - var tester = new ValidationTester(10, false, new TestProperties().setHostedVespa(true).setQuota(quota)); + var tester = new ValidationTester(10, false, new TestProperties().setHostedVespa(true).setQuota(quota).setZone(publicZone)); try { tester.deploy(null, getServices("testCluster", 10), Environment.prod, null); fail(); } catch (RuntimeException e) { assertEquals("Hourly spend for maximum specified resources ($-.--) exceeds budget from quota ($-.--)!", - ValidationTester.censorNumbers(e.getMessage())); + ValidationTester.censorNumbers(e.getMessage())); + } + } + + @Test + public void test_deploy_above_quota_budget_in_publiccd() { + var tester = new ValidationTester(10, false, new TestProperties().setHostedVespa(true).setQuota(quota).setZone(publicCdZone)); + try { + tester.deploy(null, getServices("testCluster", 10), Environment.prod, null); + fail(); + } catch (RuntimeException e) { + assertEquals("publiccd: Hourly spend for maximum specified resources ($-.--) exceeds budget from quota ($-.--)!", + ValidationTester.censorNumbers(e.getMessage())); } } |