diff options
author | Jon Marius Venstad <jonmv@users.noreply.github.com> | 2019-01-06 08:28:11 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-01-06 08:28:11 +0100 |
commit | b40c45dffc2805ddf217a2aab21a5956e7895a2d (patch) | |
tree | 704def2ce68468cf7284f2e95aaf7869e27a3970 | |
parent | e18690abf741cb05d3b9da298d66bd47e81caa6f (diff) | |
parent | ecc56c918368f3c49239145b16041821e816f6fc (diff) |
Merge pull request #8026 from vespa-engine/jvenstad/ignore-unknown-zones-when-sorting-deployments-by-jobs
Ignore zones for which there are no jobs in deployment step to job ma…
5 files changed, 14 insertions, 12 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/JobType.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/JobType.java index 5a4086f9abb..cee8d3ddfd9 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/JobType.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/JobType.java @@ -79,18 +79,18 @@ public enum JobType { } /** Returns the job type for the given zone */ - public static JobType from(SystemName system, ZoneId zone) { + public static Optional<JobType> from(SystemName system, ZoneId zone) { for (JobType job : values()) if (zone.equals(job.zones.get(system))) - return job; - throw new IllegalArgumentException("No job is known for " + zone + "."); + return Optional.of(job); + return Optional.empty(); } /** Returns the job job type for the given environment and region or null if none */ - public static JobType from(SystemName system, Environment environment, RegionName region) { + public static Optional<JobType> from(SystemName system, Environment environment, RegionName region) { switch (environment) { - case test: return systemTest; - case staging: return stagingTest; + case test: return Optional.of(systemTest); + case staging: return Optional.of(stagingTest); } return from(system, ZoneId.from(environment, region)); } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java index 8def309a2f0..eb86f0c2919 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java @@ -330,7 +330,8 @@ public class ApplicationController { () -> new IllegalArgumentException("Application package must be given when deploying to " + zone)); } else { - JobType jobType = JobType.from(controller.system(), zone); + JobType jobType = JobType.from(controller.system(), zone) + .orElseThrow(() -> new IllegalArgumentException("No job is known for " + zone + ".")); Optional<JobStatus> job = Optional.ofNullable(application.get().deploymentJobs().jobStatus().get(jobType)); if ( ! job.isPresent() || ! job.get().lastTriggered().isPresent() diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentSteps.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentSteps.java index 925f3e5948a..c400ad4c9cc 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentSteps.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentSteps.java @@ -13,6 +13,7 @@ import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; +import java.util.Optional; import java.util.function.Supplier; import java.util.stream.Collectors; @@ -38,8 +39,7 @@ public class DeploymentSteps { /** Returns jobs for this, in the order they are declared */ public List<JobType> jobs() { return spec.steps().stream() - .flatMap(step -> step.zones().stream()) - .map(this::toJob) + .flatMap(step -> toJobs(step).stream()) .collect(collectingAndThen(Collectors.toList(), Collections::unmodifiableList)); } @@ -66,6 +66,7 @@ public class DeploymentSteps { public List<JobType> toJobs(DeploymentSpec.Step step) { return step.zones().stream() .map(this::toJob) + .filter(Optional::isPresent).map(Optional::get) .collect(collectingAndThen(Collectors.toList(), Collections::unmodifiableList)); } @@ -97,7 +98,7 @@ public class DeploymentSteps { } /** Resolve job from deployment zone */ - private JobType toJob(DeploymentSpec.DeclaredZone zone) { + private Optional<JobType> toJob(DeploymentSpec.DeclaredZone zone) { return JobType.from(system.get(), zone.environment(), zone.region().orElse(null)); } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java index c7127567286..25a051e192f 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java @@ -157,7 +157,7 @@ public class ControllerTest { fail("Expected exception due to illegal deployment spec."); } catch (IllegalArgumentException e) { - assertEquals("No job is known for zone prod.deep-space-9 in default.", e.getMessage()); + assertEquals("Zone prod.deep-space-9 in deployment spec was not found in this system!", e.getMessage()); } // prod zone removal is not allowed diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializerTest.java index 81fa1685702..7dff2667b9f 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializerTest.java @@ -89,7 +89,7 @@ public class ApplicationSerializerTest { statusList.add(JobStatus.initial(JobType.stagingTest) .withTriggering(Version.fromString("5.6.6"), ApplicationVersion.unknown, empty(), "Test 2", Instant.ofEpochMilli(5)) .withCompletion(11, Optional.of(JobError.unknown), Instant.ofEpochMilli(6))); - statusList.add(JobStatus.initial(JobType.from(main, zone1)) + statusList.add(JobStatus.initial(JobType.from(main, zone1).get()) .withTriggering(Version.fromString("5.6.6"), ApplicationVersion.unknown, deployments.stream().findFirst(), "Test 3", Instant.ofEpochMilli(6)) .withCompletion(11, empty(), Instant.ofEpochMilli(7))); |