summaryrefslogtreecommitdiffstats
path: root/config-model-api
diff options
context:
space:
mode:
authorJon Marius Venstad <venstad@gmail.com>2019-11-28 15:22:09 +0100
committerJon Marius Venstad <venstad@gmail.com>2019-11-28 15:22:09 +0100
commitec7563da10532b62461166d5cb8f26ad40b5cea6 (patch)
tree592feff91028d200a659edaced81ee4b48a86e1a /config-model-api
parent8e4f20aac626d8951d0d2937f96d09f45364bd78 (diff)
Introduce DeclaredTest and Steps, and ParallelZones -> ParallelSteps extends Steps
Diffstat (limited to 'config-model-api')
-rw-r--r--config-model-api/abi-spec.json59
-rw-r--r--config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentSpec.java95
-rw-r--r--config-model-api/src/main/java/com/yahoo/config/application/api/xml/DeploymentSpecXmlReader.java5
-rw-r--r--config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecTest.java8
-rw-r--r--config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecWithoutInstanceTest.java8
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