summaryrefslogtreecommitdiffstats
path: root/controller-api
diff options
context:
space:
mode:
authorjonmv <venstad@gmail.com>2022-06-29 08:56:32 +0200
committerjonmv <venstad@gmail.com>2022-06-29 08:57:32 +0200
commit1571e59e9cdcbf7d1a6e0f5331220b2de7ee52e4 (patch)
tree31f90edf175bcc312a6bbc04e4e726993b6dfe74 /controller-api
parent1dff254213b5977d1196e0160de82a582a623a72 (diff)
Detect when using .zone() on incomplete job type
Diffstat (limited to 'controller-api')
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/JobType.java21
1 files changed, 13 insertions, 8 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 079383dd808..09ddcf4fa5e 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
@@ -1,18 +1,14 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.hosted.controller.api.integration.deployment;
-import com.yahoo.config.provision.Cloud;
import com.yahoo.config.provision.CloudName;
import com.yahoo.config.provision.Environment;
import com.yahoo.config.provision.RegionName;
-import com.yahoo.config.provision.zone.ZoneApi;
import com.yahoo.config.provision.zone.ZoneId;
import com.yahoo.config.provision.zone.ZoneList;
import com.yahoo.vespa.hosted.controller.api.integration.zone.ZoneRegistry;
-import java.util.Comparator;
import java.util.List;
-import java.util.stream.Collectors;
import java.util.stream.Stream;
import static ai.vespa.validation.Validation.require;
@@ -22,7 +18,6 @@ import static com.yahoo.config.provision.Environment.prod;
import static com.yahoo.config.provision.Environment.staging;
import static com.yahoo.config.provision.Environment.test;
import static java.util.Comparator.naturalOrder;
-import static java.util.stream.Collectors.toUnmodifiableList;
/**
* Specification for a deployment and/or test job to run: what zone, and whether it is a production test.
@@ -31,6 +26,8 @@ import static java.util.stream.Collectors.toUnmodifiableList;
*/
public final class JobType implements Comparable<JobType> {
+ private static final RegionName unknown = RegionName.from("unknown");
+
private final String jobName;
private final ZoneId zone;
private final boolean isProductionTest;
@@ -53,8 +50,11 @@ public final class JobType implements Comparable<JobType> {
/** Returns a test job in the given environment, preferring the given cloud, is possible; using the system cloud otherwise. */
private static JobType testIn(Environment environment, ZoneRegistry zones, CloudName cloud) {
+ if (cloud == null)
+ return deploymentTo(ZoneId.from(environment, unknown));
+
ZoneList candidates = zones.zones().controllerUpgraded().in(environment);
- if (cloud == null || candidates.in(cloud).zones().isEmpty())
+ if (candidates.in(cloud).zones().isEmpty())
cloud = zones.systemZone().getCloudName();
return candidates.in(cloud).zones().stream().findFirst()
@@ -152,7 +152,8 @@ public final class JobType implements Comparable<JobType> {
public static List<JobType> allIn(ZoneRegistry zones) {
return zones.zones().reachable().zones().stream()
.flatMap(zone -> zone.getEnvironment().isProduction() ? Stream.of(deploymentTo(zone.getId()), productionTestOf(zone.getId()))
- : Stream.of(deploymentTo(zone.getId())))
+ : zone.getEnvironment().isTest() ? Stream.of(deploymentTo(ZoneId.from(zone.getEnvironment(), unknown)))
+ : Stream.of(deploymentTo(zone.getId())))
.distinct()
.sorted(naturalOrder())
.toList();
@@ -169,6 +170,10 @@ public final class JobType implements Comparable<JobType> {
/** Returns the zone for this job. */
public ZoneId zone() {
+ // sigh ... but the alternative is worse.
+ if (zone.region() == unknown)
+ throw new IllegalStateException("this job type was not initiated with a proper zone, programming error");
+
return zone;
}
@@ -203,7 +208,7 @@ public final class JobType implements Comparable<JobType> {
@Override
public int compareTo(JobType other) {
int result;
- if (0 != (result = environment().compareTo(other.environment()))) return -result;
+ if (0 != (result = environment().compareTo(other.environment())) || environment().isTest()) return -result;
if (0 != (result = zone.region().compareTo(other.zone.region()))) return result;
return Boolean.compare(isProductionTest, other.isProductionTest);
}