summaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorØyvind Grønnesby <oyving@verizonmedia.com>2021-01-05 09:05:58 +0100
committerGitHub <noreply@github.com>2021-01-05 09:05:58 +0100
commit7f7328ac1a8ee82307ad5a4c9ae324776841f80d (patch)
tree5feec2a7d1f93ec9fdf24f3eb2fe91667c66b1ea /config-model
parentaee8169ff21a049570b7423e100949d97d1c202a (diff)
parentf4508f1dc3e5391b20e98ca0734498b0b9559016 (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')
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/application/validation/QuotaValidator.java12
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/application/validation/QuotaValidatorTest.java25
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()));
}
}