summaryrefslogtreecommitdiffstats
path: root/config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentSpec.java
diff options
context:
space:
mode:
Diffstat (limited to 'config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentSpec.java')
-rw-r--r--config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentSpec.java19
1 files changed, 19 insertions, 0 deletions
diff --git a/config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentSpec.java b/config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentSpec.java
index 4a94dd076af..7b4e91bfe4a 100644
--- a/config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentSpec.java
+++ b/config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentSpec.java
@@ -1,6 +1,7 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.config.application.api;
+import com.yahoo.collections.Comparables;
import com.yahoo.config.application.api.xml.DeploymentSpecXmlReader;
import com.yahoo.config.provision.AthenzDomain;
import com.yahoo.config.provision.AthenzService;
@@ -72,6 +73,7 @@ public class DeploymentSpec {
this.athenzService = athenzService;
this.xmlForm = xmlForm;
validateTotalDelay(steps);
+ validateUpgradePoliciesOfIncreasingConservativeness(steps);
}
// TODO: Remove after October 2019
@@ -147,6 +149,23 @@ public class DeploymentSpec {
" but max 24 hours is allowed");
}
+ /** Throws an IllegalArgumentException if any instance has a looser upgrade policy than the previous */
+ private void validateUpgradePoliciesOfIncreasingConservativeness(List<Step> steps) {
+ UpgradePolicy previous = Collections.min(List.of(UpgradePolicy.values()));
+ for (Step step : steps) {
+ UpgradePolicy strictest = previous;
+ List<DeploymentInstanceSpec> specs = instances(List.of(step));
+ for (DeploymentInstanceSpec spec : specs) {
+ if (spec.upgradePolicy().compareTo(previous) < 0)
+ throw new IllegalArgumentException("Instance '" + spec.name() + "' cannot have a looser upgrade " +
+ "policy than the previous of '" + previous + "'");
+
+ strictest = Comparables.max(strictest, spec.upgradePolicy());
+ }
+ previous = strictest;
+ }
+ }
+
// TODO: Remove after October 2019
private DeploymentInstanceSpec singleInstance() {
return singleInstance(steps);