From b4c05bdafb1cb6aa5f029dc52a9c3bb15986e30b Mon Sep 17 00:00:00 2001 From: Jon Bratseth Date: Wed, 30 Aug 2017 18:33:57 +0200 Subject: Simplify --- .../config/application/api/DeploymentSpec.java | 25 +++++++++++++++++++++- .../config/application/api/DeploymentSpecTest.java | 3 +-- 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 steps) { + private static void validateZonesOld(List steps) { // Collect both non-parallel and parallel zones List 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 steps) { + Set 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 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 completeSteps(List 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()); } } -- cgit v1.2.3