diff options
author | Jon Marius Venstad <venstad@gmail.com> | 2019-11-28 15:22:09 +0100 |
---|---|---|
committer | Jon Marius Venstad <venstad@gmail.com> | 2019-11-28 15:22:09 +0100 |
commit | ec7563da10532b62461166d5cb8f26ad40b5cea6 (patch) | |
tree | 592feff91028d200a659edaced81ee4b48a86e1a /config-model-api | |
parent | 8e4f20aac626d8951d0d2937f96d09f45364bd78 (diff) |
Introduce DeclaredTest and Steps, and ParallelZones -> ParallelSteps extends Steps
Diffstat (limited to 'config-model-api')
5 files changed, 138 insertions, 37 deletions
diff --git a/config-model-api/abi-spec.json b/config-model-api/abi-spec.json index edf83fe4475..7920b7bab78 100644 --- a/config-model-api/abi-spec.json +++ b/config-model-api/abi-spec.json @@ -204,12 +204,12 @@ "public boolean canUpgradeAt(java.time.Instant)", "public boolean canChangeRevisionAt(java.time.Instant)", "public java.util.List zones()", - "public boolean deploysTo(com.yahoo.config.provision.Environment, java.util.Optional)", + "public boolean concerns(com.yahoo.config.provision.Environment, java.util.Optional)", "public java.util.Optional athenzDomain()", "public java.util.Optional athenzService(com.yahoo.config.provision.Environment, com.yahoo.config.provision.RegionName)", "public com.yahoo.config.application.api.Notifications notifications()", "public java.util.List endpoints()", - "public boolean includes(com.yahoo.config.provision.Environment, java.util.Optional)", + "public boolean deploysTo(com.yahoo.config.provision.Environment, java.util.Optional)", "public boolean equals(java.lang.Object)", "public int hashCode()", "public java.lang.String toString()" @@ -231,6 +231,22 @@ ], "fields": [] }, + "com.yahoo.config.application.api.DeploymentSpec$DeclaredTest": { + "superClass": "com.yahoo.config.application.api.DeploymentSpec$Step", + "interfaces": [], + "attributes": [ + "public" + ], + "methods": [ + "public void <init>(com.yahoo.config.provision.RegionName, java.util.Optional)", + "public boolean concerns(com.yahoo.config.provision.Environment, java.util.Optional)", + "public boolean isTest()", + "public boolean equals(java.lang.Object)", + "public int hashCode()", + "public java.lang.String toString()" + ], + "fields": [] + }, "com.yahoo.config.application.api.DeploymentSpec$DeclaredZone": { "superClass": "com.yahoo.config.application.api.DeploymentSpec$Step", "interfaces": [], @@ -246,7 +262,8 @@ "public java.util.Optional testerFlavor()", "public java.util.Optional athenzService()", "public java.util.List zones()", - "public boolean deploysTo(com.yahoo.config.provision.Environment, java.util.Optional)", + "public boolean concerns(com.yahoo.config.provision.Environment, java.util.Optional)", + "public boolean isTest()", "public int hashCode()", "public boolean equals(java.lang.Object)", "public java.lang.String toString()" @@ -262,22 +279,19 @@ "methods": [ "public void <init>(java.time.Duration)", "public java.time.Duration delay()", - "public boolean deploysTo(com.yahoo.config.provision.Environment, java.util.Optional)", + "public boolean concerns(com.yahoo.config.provision.Environment, java.util.Optional)", "public java.lang.String toString()" ], "fields": [] }, - "com.yahoo.config.application.api.DeploymentSpec$ParallelZones": { - "superClass": "com.yahoo.config.application.api.DeploymentSpec$Step", + "com.yahoo.config.application.api.DeploymentSpec$ParallelSteps": { + "superClass": "com.yahoo.config.application.api.DeploymentSpec$Steps", "interfaces": [], "attributes": [ "public" ], "methods": [ "public void <init>(java.util.List)", - "public java.util.List zones()", - "public java.util.List steps()", - "public boolean deploysTo(com.yahoo.config.provision.Environment, java.util.Optional)", "public boolean equals(java.lang.Object)", "public int hashCode()", "public java.lang.String toString()" @@ -293,11 +307,29 @@ ], "methods": [ "public void <init>()", - "public final boolean deploysTo(com.yahoo.config.provision.Environment)", - "public abstract boolean deploysTo(com.yahoo.config.provision.Environment, java.util.Optional)", + "public final boolean concerns(com.yahoo.config.provision.Environment)", + "public abstract boolean concerns(com.yahoo.config.provision.Environment, java.util.Optional)", "public java.util.List zones()", "public java.time.Duration delay()", - "public java.util.List steps()" + "public java.util.List steps()", + "public boolean isTest()" + ], + "fields": [] + }, + "com.yahoo.config.application.api.DeploymentSpec$Steps": { + "superClass": "com.yahoo.config.application.api.DeploymentSpec$Step", + "interfaces": [], + "attributes": [ + "public" + ], + "methods": [ + "public void <init>(java.util.List)", + "public java.util.List zones()", + "public java.util.List steps()", + "public boolean concerns(com.yahoo.config.provision.Environment, java.util.Optional)", + "public boolean equals(java.lang.Object)", + "public int hashCode()", + "public java.lang.String toString()" ], "fields": [] }, @@ -331,7 +363,6 @@ "public java.util.List steps()", "public java.util.Optional athenzDomain()", "public java.util.Optional athenzService()", - "public java.util.Optional athenzService(com.yahoo.config.provision.InstanceName, com.yahoo.config.provision.Environment, com.yahoo.config.provision.RegionName)", "public java.lang.String xmlForm()", "public java.util.Optional instance(com.yahoo.config.provision.InstanceName)", "public com.yahoo.config.application.api.DeploymentInstanceSpec requireInstance(java.lang.String)", @@ -572,4 +603,4 @@ "public static final com.yahoo.config.application.api.ValidationOverrides all" ] } -} +}
\ No newline at end of file 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 6440b8f893c..b37a915ca86 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 @@ -198,7 +198,7 @@ public class DeploymentSpec { private static List<DeploymentInstanceSpec> instances(List<DeploymentSpec.Step> steps) { return steps.stream() - .flatMap(step -> step instanceof ParallelZones ? ((ParallelZones) step).steps.stream() : List.of(step).stream()) + .flatMap(step -> step instanceof Steps ? step.steps().stream() : List.of(step).stream()) .filter(step -> step instanceof DeploymentInstanceSpec).map(DeploymentInstanceSpec.class::cast) .collect(Collectors.toList()); } @@ -279,9 +279,12 @@ public class DeploymentSpec { /** The delay introduced by this step (beyond the time it takes to execute the step). Default is zero. */ public Duration delay() { return Duration.ZERO; } - /** Returns all the steps nested in this. This default implementatiino returns an empty list. */ + /** Returns all the steps nested in this. */ public List<Step> steps() { return List.of(); } + /** Returns whether this step is a test run. */ + public boolean isTest() { return false; } + } /** A deployment step which is to wait for some time before progressing to the next step */ @@ -348,13 +351,16 @@ public class DeploymentSpec { public List<DeclaredZone> zones() { return Collections.singletonList(this); } @Override - public boolean deploysTo(Environment environment, Optional<RegionName> region) { + public boolean concerns(Environment environment, Optional<RegionName> region) { if (environment != this.environment) return false; if (region.isPresent() && ! region.equals(this.region)) return false; return true; } @Override + public boolean isTest() { return environment.isTest(); } + + @Override public int hashCode() { return Objects.hash(environment, region); } @@ -376,16 +382,55 @@ public class DeploymentSpec { } - /** A deployment step which is to run multiple steps (zones or instances) in parallel */ - public static class ParallelZones extends Step { + /** A declared production test */ + public static class DeclaredTest extends Step { + + private final RegionName region; + private final Optional<String> testerFlavor; + + public DeclaredTest(RegionName region, Optional<String> testerFlavor) { + this.region = region; + this.testerFlavor = testerFlavor; + } + + @Override + public boolean concerns(Environment environment, Optional<RegionName> region) { + return environment == Environment.prod && Optional.of(this.region).equals(region); + } + + @Override + public boolean isTest() { return true; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + DeclaredTest that = (DeclaredTest) o; + return region.equals(that.region) && + testerFlavor.equals(that.testerFlavor); + } + + @Override + public int hashCode() { + return Objects.hash(region, testerFlavor); + } + + @Override + public String toString() { + return "tests for prod." + region; + } + + } + + /** A container for several steps, by default in serial order */ + public static class Steps extends Step { private final List<Step> steps; - public ParallelZones(List<Step> steps) { + public Steps(List<Step> steps) { this.steps = List.copyOf(steps); } - /** Returns the steps inside this which are zones */ @Override public List<DeclaredZone> zones() { return this.steps.stream() @@ -394,21 +439,19 @@ public class DeploymentSpec { .collect(Collectors.toList()); } - /** Returns all the steps nested in this */ @Override public List<Step> steps() { return steps; } @Override public boolean concerns(Environment environment, Optional<RegionName> region) { - return steps().stream().anyMatch(zone -> zone.concerns(environment, region)); + return steps.stream().anyMatch(step -> step.concerns(environment, region)); } @Override public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof ParallelZones)) return false; - ParallelZones that = (ParallelZones) o; - return Objects.equals(steps, that.steps); + if (o == null || getClass() != o.getClass()) return false; + return steps.equals(((Steps) o).steps); } @Override @@ -418,7 +461,33 @@ public class DeploymentSpec { @Override public String toString() { - return steps.size() + " parallel steps"; + return steps.size() + " steps"; + } + + } + + /** A container for multiple other steps, which are executed in parallel */ + public static class ParallelSteps extends Steps { + + public ParallelSteps(List<Step> steps) { + super(steps); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if ( ! (o instanceof ParallelSteps)) return false; + return Objects.equals(steps(), ((ParallelSteps) o).steps()); + } + + @Override + public int hashCode() { + return Objects.hash(steps()); + } + + @Override + public String toString() { + return steps().size() + " parallel steps"; } } diff --git a/config-model-api/src/main/java/com/yahoo/config/application/api/xml/DeploymentSpecXmlReader.java b/config-model-api/src/main/java/com/yahoo/config/application/api/xml/DeploymentSpecXmlReader.java index bc17ee0cb2b..b38816d8405 100644 --- a/config-model-api/src/main/java/com/yahoo/config/application/api/xml/DeploymentSpecXmlReader.java +++ b/config-model-api/src/main/java/com/yahoo/config/application/api/xml/DeploymentSpecXmlReader.java @@ -5,7 +5,7 @@ import com.yahoo.config.application.api.DeploymentInstanceSpec; import com.yahoo.config.application.api.DeploymentSpec; import com.yahoo.config.application.api.DeploymentSpec.DeclaredZone; import com.yahoo.config.application.api.DeploymentSpec.Delay; -import com.yahoo.config.application.api.DeploymentSpec.ParallelZones; +import com.yahoo.config.application.api.DeploymentSpec.ParallelSteps; import com.yahoo.config.application.api.DeploymentSpec.Step; import com.yahoo.config.application.api.Endpoint; import com.yahoo.config.application.api.Notifications; @@ -50,6 +50,7 @@ public class DeploymentSpecXmlReader { private static final String regionTag = "region"; private static final String delayTag = "delay"; private static final String parallelTag = "parallel"; + private static final String stepsTag = "steps"; private static final String endpointsTag = "endpoints"; private static final String endpointTag = "endpoint"; private static final String notificationsTag = "notifications"; @@ -193,7 +194,7 @@ public class DeploymentSpecXmlReader { longAttribute("minutes", stepTag) * 60 + longAttribute("seconds", stepTag)))); case parallelTag: // regions and instances may be nested within - return List.of(new ParallelZones(XML.getChildren(stepTag).stream() + return List.of(new ParallelSteps(XML.getChildren(stepTag).stream() .flatMap(child -> readSteps(child, globalServiceId, parentTag).stream()) .collect(Collectors.toList()))); case regionTag: 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 2b60c9768a7..9a12655fa2e 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 @@ -371,10 +371,10 @@ public class DeploymentSpecTest { "</deployment>" ); DeploymentSpec spec = DeploymentSpec.fromXml(r); - DeploymentSpec.ParallelZones parallelZones = ((DeploymentSpec.ParallelZones) spec.requireInstance("default").steps().get(1)); - assertEquals(2, parallelZones.zones().size()); - assertEquals(RegionName.from("us-central-1"), parallelZones.zones().get(0).region().get()); - assertEquals(RegionName.from("us-east-3"), parallelZones.zones().get(1).region().get()); + DeploymentSpec.ParallelSteps parallelSteps = ((DeploymentSpec.ParallelSteps) spec.requireInstance("default").steps().get(1)); + assertEquals(2, parallelSteps.zones().size()); + assertEquals(RegionName.from("us-central-1"), parallelSteps.zones().get(0).region().get()); + assertEquals(RegionName.from("us-east-3"), parallelSteps.zones().get(1).region().get()); } @Test diff --git a/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecWithoutInstanceTest.java b/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecWithoutInstanceTest.java index 99d5486968a..0d1556bc666 100644 --- a/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecWithoutInstanceTest.java +++ b/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecWithoutInstanceTest.java @@ -271,10 +271,10 @@ public class DeploymentSpecWithoutInstanceTest { "</deployment>" ); DeploymentSpec spec = DeploymentSpec.fromXml(r); - DeploymentSpec.ParallelZones parallelZones = ((DeploymentSpec.ParallelZones) spec.requireInstance("default").steps().get(1)); - assertEquals(2, parallelZones.zones().size()); - assertEquals(RegionName.from("us-central-1"), parallelZones.zones().get(0).region().get()); - assertEquals(RegionName.from("us-east-3"), parallelZones.zones().get(1).region().get()); + DeploymentSpec.ParallelSteps parallelSteps = ((DeploymentSpec.ParallelSteps) spec.requireInstance("default").steps().get(1)); + assertEquals(2, parallelSteps.zones().size()); + assertEquals(RegionName.from("us-central-1"), parallelSteps.zones().get(0).region().get()); + assertEquals(RegionName.from("us-east-3"), parallelSteps.zones().get(1).region().get()); } @Test |