summaryrefslogtreecommitdiffstats
path: root/config-model-api
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@yahoo-inc.com>2017-08-30 18:33:57 +0200
committerJon Bratseth <bratseth@yahoo-inc.com>2017-08-30 18:33:57 +0200
commitb4c05bdafb1cb6aa5f029dc52a9c3bb15986e30b (patch)
tree80db501df5e1e06436d2e6570c1de5cd00d7e134 /config-model-api
parent85afc7537760d00578bf4d528554fd2889995c13 (diff)
Simplify
Diffstat (limited to 'config-model-api')
-rw-r--r--config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentSpec.java25
-rw-r--r--config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecTest.java3
2 files changed, 25 insertions, 3 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 ba68404b7ca..7f203c2b08b 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
@@ -73,7 +73,7 @@ public class DeploymentSpec {
}
/** Throw an IllegalArgumentException if any production zone is declared multiple times */
- private static void validateZones(List<Step> steps) {
+ private static void validateZonesOld(List<Step> steps) {
// Collect both non-parallel and parallel zones
List<DeclaredZone> zones = new ArrayList<>();
steps.stream()
@@ -98,7 +98,25 @@ public class DeploymentSpec {
"duplicated regions: " + duplicates);
}
}
+
+ /** Throw an IllegalArgumentException if any production zone is declared multiple times */
+ private void validateZones(List<Step> steps) {
+ Set<DeclaredZone> zones = new HashSet<>();
+
+ steps.stream().filter(step -> step instanceof DeclaredZone)
+ .map(DeclaredZone.class::cast)
+ .forEach(zone -> ensureUnique(zone, zones));
+ steps.stream().filter(step -> step instanceof ParallelZones)
+ .map(ParallelZones.class::cast)
+ .flatMap(parallelZones -> parallelZones.zones().stream())
+ .forEach(zone -> ensureUnique(zone, zones));
+ }
+ private void ensureUnique(DeclaredZone zone, Set<DeclaredZone> zones) {
+ if ( ! zones.add(zone))
+ throw new IllegalArgumentException(zone + " is listed twice in deployment.xml");
+ }
+
/** Adds missing required steps and reorders steps to a permissible order */
private static List<Step> completeSteps(List<Step> steps) {
// Ensure no duplicate deployments to the same zone
@@ -399,6 +417,11 @@ public class DeploymentSpec {
if ( ! this.region.equals(other.region())) return false;
return true;
}
+
+ @Override
+ public String toString() {
+ return environment + ( region.isPresent() ? "." + region.get() : "");
+ }
}
diff --git a/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecTest.java b/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecTest.java
index 2b503125e33..1816bfb25ee 100644
--- a/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecTest.java
+++ b/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecTest.java
@@ -276,8 +276,7 @@ public class DeploymentSpecTest {
DeploymentSpec.fromXml(r);
fail("Expected exception");
} catch (IllegalArgumentException e) {
- assertEquals("All declared regions must be unique, but found these duplicated regions: " +
- "[us-west-1, us-central-1]", e.getMessage());
+ assertEquals("prod.us-west-1 is listed twice in deployment.xml", e.getMessage());
}
}