summaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorJon Marius Venstad <jonmv@users.noreply.github.com>2022-04-20 11:23:52 +0200
committerGitHub <noreply@github.com>2022-04-20 11:23:52 +0200
commit92325cc097e9d3e51f0196fa4440a2d6153e4893 (patch)
tree4a6592c4d94acd83928f0f307d36654fe5a0aac3 /controller-server
parent66b6364237ff60e26f98a821da5b7baa5b9c6eaf (diff)
parentf9133d57754e4659f1fd8dc6efe82c5120f789dc (diff)
Merge pull request #22125 from vespa-engine/jonmv/serialize-job-type-with-zone
Jonmv/serialize job type with zone
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentStatus.java2
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/RetriggerEntrySerializer.java24
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/Run.java4
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java5
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/CuratorDb.java15
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/NotificationsSerializer.java16
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializer.java14
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java8
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/deployment/BadgeApiHandler.java4
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/filter/AthenzRoleFilter.java6
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentContext.java10
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/CloudTrialExpirerTest.java2
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/JobRunnerTest.java2
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/NotificationsSerializerTest.java9
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializerTest.java3
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/responses/root.json22
16 files changed, 85 insertions, 61 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentStatus.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentStatus.java
index 7b53d9c5d99..0595245b3d7 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentStatus.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentStatus.java
@@ -486,7 +486,7 @@ public class DeploymentStatus {
if ( job.type().isProduction() && job.type().isDeployment()
&& allJobs.successOn(productionJob.versions()).type(testType).isEmpty()
&& testJobs.keySet().stream()
- .noneMatch(test -> test.type() == testType
+ .noneMatch(test -> test.type().equals(testType)
&& testJobs.get(test).stream().anyMatch(testJob -> testJob.versions().equals(productionJob.versions())))) {
JobId testJob = firstDeclaredOrElseImplicitTest(testType);
testJobs.merge(testJob,
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/RetriggerEntrySerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/RetriggerEntrySerializer.java
index 6f456d2e217..063167647d5 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/RetriggerEntrySerializer.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/RetriggerEntrySerializer.java
@@ -3,6 +3,7 @@
package com.yahoo.vespa.hosted.controller.deployment;
import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.config.provision.SystemName;
import com.yahoo.slime.Cursor;
import com.yahoo.slime.Inspector;
import com.yahoo.slime.Slime;
@@ -23,29 +24,35 @@ public class RetriggerEntrySerializer {
private static final String JOB_TYPE_KEY = "jobType";
private static final String MIN_REQUIRED_RUN_ID_KEY = "minimumRunId";
- public static List<RetriggerEntry> fromSlime(Slime slime) {
+ private final SystemName system;
+
+ public RetriggerEntrySerializer(SystemName system) {
+ this.system = system;
+ }
+
+ public List<RetriggerEntry> fromSlime(Slime slime) {
return SlimeUtils.entriesStream(slime.get().field("entries"))
- .map(RetriggerEntrySerializer::deserializeEntry)
+ .map(this::deserializeEntry)
.collect(Collectors.toList());
}
- public static Slime toSlime(List<RetriggerEntry> entryList) {
+ public Slime toSlime(List<RetriggerEntry> entryList) {
Slime slime = new Slime();
Cursor root = slime.setObject();
Cursor entries = root.setArray("entries");
- entryList.forEach(e -> RetriggerEntrySerializer.serializeEntry(entries, e));
+ entryList.forEach(e -> serializeEntry(entries, e));
return slime;
}
- private static void serializeEntry(Cursor array, RetriggerEntry entry) {
+ private void serializeEntry(Cursor array, RetriggerEntry entry) {
Cursor root = array.addObject();
Cursor jobid = root.setObject(JOB_ID_KEY);
jobid.setString(APPLICATION_ID_KEY, entry.jobId().application().serializedForm());
- jobid.setString(JOB_TYPE_KEY, entry.jobId().type().jobName());
+ jobid.setString(JOB_TYPE_KEY, entry.jobId().type().serialized(system));
root.setLong(MIN_REQUIRED_RUN_ID_KEY, entry.requiredRun());
}
- private static RetriggerEntry deserializeEntry(Inspector inspector) {
+ private RetriggerEntry deserializeEntry(Inspector inspector) {
Inspector jobid = inspector.field(JOB_ID_KEY);
ApplicationId applicationId = ApplicationId.fromSerializedForm(require(jobid, APPLICATION_ID_KEY).asString());
JobType jobType = JobType.fromJobName(require(jobid, JOB_TYPE_KEY).asString());
@@ -53,11 +60,12 @@ public class RetriggerEntrySerializer {
return new RetriggerEntry(new JobId(applicationId, jobType), minRequiredRunId);
}
- private static Inspector require(Inspector inspector, String fieldName) {
+ private Inspector require(Inspector inspector, String fieldName) {
Inspector field = inspector.field(fieldName);
if (!field.valid()) {
throw new IllegalStateException("Could not deserialize, field not found in json: " + fieldName);
}
return field;
}
+
}
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/Run.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/Run.java
index e73d3f52e1f..dcde21c8cf5 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/Run.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/Run.java
@@ -297,7 +297,7 @@ public class Run {
return steps.entrySet().stream()
.filter(entry -> entry.getValue().status() == unfinished
&& entry.getKey().prerequisites().stream()
- .allMatch(step -> steps.get(step) == null
+ .allMatch(step -> steps.get(step) == null
|| steps.get(step).status() == succeeded))
.map(Map.Entry::getKey)
.collect(Collectors.toUnmodifiableList());
@@ -310,7 +310,7 @@ public class Run {
&& entry.getKey().alwaysRun()
&& entry.getKey().prerequisites().stream()
.filter(Step::alwaysRun)
- .allMatch(step -> steps.get(step) == null
+ .allMatch(step -> steps.get(step) == null
|| steps.get(step).status() != unfinished))
.map(Map.Entry::getKey)
.collect(Collectors.toUnmodifiableList());
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java
index 4b9df825951..e853dbc0d5a 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java
@@ -54,7 +54,6 @@ import java.util.Optional;
import java.util.OptionalInt;
import java.util.OptionalLong;
import java.util.Set;
-import java.util.function.Function;
/**
* Serializes {@link Application}s to/from slime.
@@ -245,7 +244,7 @@ public class ApplicationSerializer {
revisions.development().forEach((job, devRevisions) -> {
Cursor devRevisionsObject = devRevisionsArray.addObject();
devRevisionsObject.setString(instanceNameField, job.application().instance().value());
- devRevisionsObject.setString(jobTypeField, job.type().jobName());
+ devRevisionsObject.setString(jobTypeField, job.type().serialized(system));
revisionsToSlime(devRevisions, devRevisionsObject.setArray(versionsField));
});
}
@@ -285,7 +284,7 @@ public class ApplicationSerializer {
Cursor jobStatusArray = cursor.setArray(jobStatusField);
jobPauses.forEach((type, until) -> {
Cursor jobPauseObject = jobStatusArray.addObject();
- jobPauseObject.setString(jobTypeField, type.jobName());
+ jobPauseObject.setString(jobTypeField, type.serialized(system));
jobPauseObject.setLong(pausedUntilField, until.toEpochMilli());
});
}
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/CuratorDb.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/CuratorDb.java
index 6190d58e0a1..45b762b1b9c 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/CuratorDb.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/CuratorDb.java
@@ -107,7 +107,6 @@ public class CuratorDb {
private final ControllerVersionSerializer controllerVersionSerializer = new ControllerVersionSerializer();
private final ConfidenceOverrideSerializer confidenceOverrideSerializer = new ConfidenceOverrideSerializer();
private final TenantSerializer tenantSerializer = new TenantSerializer();
- private final RunSerializer runSerializer = new RunSerializer();
private final OsVersionSerializer osVersionSerializer = new OsVersionSerializer();
private final OsVersionTargetSerializer osVersionTargetSerializer = new OsVersionTargetSerializer(osVersionSerializer);
private final OsVersionStatusSerializer osVersionStatusSerializer = new OsVersionStatusSerializer(osVersionSerializer, nodeVersionSerializer);
@@ -116,6 +115,9 @@ public class CuratorDb {
private final AuditLogSerializer auditLogSerializer = new AuditLogSerializer();
private final NameServiceQueueSerializer nameServiceQueueSerializer = new NameServiceQueueSerializer();
private final ApplicationSerializer applicationSerializer;
+ private final RunSerializer runSerializer;
+ private final RetriggerEntrySerializer retriggerEntrySerializer;
+ private final NotificationsSerializer notificationsSerializer;
private final Curator curator;
private final Duration tryLockTimeout;
@@ -138,6 +140,9 @@ public class CuratorDb {
this.tryLockTimeout = tryLockTimeout;
this.lockScheme = Flags.CONTROLLER_LOCK_SCHEME.bindTo(flagSource);
this.applicationSerializer = new ApplicationSerializer(system);
+ this.runSerializer = new RunSerializer(system);
+ this.retriggerEntrySerializer = new RetriggerEntrySerializer(system);
+ this.notificationsSerializer = new NotificationsSerializer(system);
}
/** Returns all hostnames configured to be part of this ZooKeeper cluster */
@@ -683,7 +688,7 @@ public class CuratorDb {
public List<Notification> readNotifications(TenantName tenantName) {
return readSlime(notificationsPath(tenantName))
- .map(slime -> NotificationsSerializer.fromSlime(tenantName, slime)).orElseGet(List::of);
+ .map(slime -> notificationsSerializer.fromSlime(tenantName, slime)).orElseGet(List::of);
}
@@ -694,7 +699,7 @@ public class CuratorDb {
}
public void writeNotifications(TenantName tenantName, List<Notification> notifications) {
- curator.set(notificationsPath(tenantName), asJson(NotificationsSerializer.toSlime(notifications)));
+ curator.set(notificationsPath(tenantName), asJson(notificationsSerializer.toSlime(notifications)));
}
public void deleteNotifications(TenantName tenantName) {
@@ -715,11 +720,11 @@ public class CuratorDb {
// -------------- Job Retrigger entries -----------------------------------
public List<RetriggerEntry> readRetriggerEntries() {
- return readSlime(deploymentRetriggerPath()).map(RetriggerEntrySerializer::fromSlime).orElseGet(List::of);
+ return readSlime(deploymentRetriggerPath()).map(retriggerEntrySerializer::fromSlime).orElseGet(List::of);
}
public void writeRetriggerEntries(List<RetriggerEntry> retriggerEntries) {
- curator.set(deploymentRetriggerPath(), asJson(RetriggerEntrySerializer.toSlime(retriggerEntries)));
+ curator.set(deploymentRetriggerPath(), asJson(retriggerEntrySerializer.toSlime(retriggerEntries)));
}
// -------------- Paths ---------------------------------------------------
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/NotificationsSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/NotificationsSerializer.java
index 10763e1f22c..1d5f6d70ca5 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/NotificationsSerializer.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/NotificationsSerializer.java
@@ -4,6 +4,7 @@ package com.yahoo.vespa.hosted.controller.persistence;
import com.yahoo.config.provision.ApplicationName;
import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.config.provision.InstanceName;
+import com.yahoo.config.provision.SystemName;
import com.yahoo.config.provision.TenantName;
import com.yahoo.config.provision.zone.ZoneId;
import com.yahoo.slime.Cursor;
@@ -43,7 +44,13 @@ public class NotificationsSerializer {
private static final String jobTypeField = "jobId";
private static final String runNumberField = "runNumber";
- public static Slime toSlime(List<Notification> notifications) {
+ private final SystemName system;
+
+ NotificationsSerializer(SystemName system) {
+ this.system = system;
+ }
+
+ public Slime toSlime(List<Notification> notifications) {
Slime slime = new Slime();
Cursor notificationsArray = slime.setObject().setArray(notificationsFieldName);
@@ -59,20 +66,20 @@ public class NotificationsSerializer {
notification.source().instance().ifPresent(instance -> notificationObject.setString(instanceField, instance.value()));
notification.source().zoneId().ifPresent(zoneId -> notificationObject.setString(zoneField, zoneId.value()));
notification.source().clusterId().ifPresent(clusterId -> notificationObject.setString(clusterIdField, clusterId.value()));
- notification.source().jobType().ifPresent(jobType -> notificationObject.setString(jobTypeField, jobType.jobName()));
+ notification.source().jobType().ifPresent(jobType -> notificationObject.setString(jobTypeField, jobType.serialized(system)));
notification.source().runNumber().ifPresent(runNumber -> notificationObject.setLong(runNumberField, runNumber));
}
return slime;
}
- public static List<Notification> fromSlime(TenantName tenantName, Slime slime) {
+ public List<Notification> fromSlime(TenantName tenantName, Slime slime) {
return SlimeUtils.entriesStream(slime.get().field(notificationsFieldName))
.map(inspector -> fromInspector(tenantName, inspector))
.collect(Collectors.toUnmodifiableList());
}
- private static Notification fromInspector(TenantName tenantName, Inspector inspector) {
+ private Notification fromInspector(TenantName tenantName, Inspector inspector) {
return new Notification(
SlimeUtils.instant(inspector.field(atFieldName)),
typeFrom(inspector.field(typeField)),
@@ -125,4 +132,5 @@ public class NotificationsSerializer {
default: throw new IllegalArgumentException("Unknown serialized notification level value '" + field.asString() + "'");
}
}
+
}
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializer.java
index 32ba583321c..731e5790a64 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializer.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializer.java
@@ -3,6 +3,7 @@ package com.yahoo.vespa.hosted.controller.persistence;
import com.yahoo.component.Version;
import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.config.provision.SystemName;
import com.yahoo.security.X509CertificateUtils;
import com.yahoo.slime.ArrayTraverser;
import com.yahoo.slime.Cursor;
@@ -10,12 +11,9 @@ import com.yahoo.slime.Inspector;
import com.yahoo.slime.ObjectTraverser;
import com.yahoo.slime.Slime;
import com.yahoo.slime.SlimeUtils;
-import com.yahoo.vespa.hosted.controller.Application;
-import com.yahoo.vespa.hosted.controller.api.integration.deployment.ApplicationVersion;
import com.yahoo.vespa.hosted.controller.api.integration.deployment.JobType;
import com.yahoo.vespa.hosted.controller.api.integration.deployment.RevisionId;
import com.yahoo.vespa.hosted.controller.api.integration.deployment.RunId;
-import com.yahoo.vespa.hosted.controller.api.integration.deployment.SourceRevision;
import com.yahoo.vespa.hosted.controller.deployment.ConvergenceSummary;
import com.yahoo.vespa.hosted.controller.deployment.Run;
import com.yahoo.vespa.hosted.controller.deployment.RunStatus;
@@ -30,9 +28,7 @@ import java.util.Collections;
import java.util.EnumMap;
import java.util.NavigableMap;
import java.util.Optional;
-import java.util.OptionalLong;
import java.util.TreeMap;
-import java.util.function.Function;
import static com.yahoo.vespa.hosted.controller.deployment.RunStatus.aborted;
import static com.yahoo.vespa.hosted.controller.deployment.RunStatus.deploymentFailed;
@@ -101,6 +97,12 @@ class RunSerializer {
private static final String isDryRunField = "isDryRun";
private static final String reasonField = "reason";
+ private final SystemName system;
+
+ RunSerializer(SystemName system) {
+ this.system = system;
+ }
+
Run runFromSlime(Slime slime) {
return runFromSlime(slime.get());
}
@@ -209,7 +211,7 @@ class RunSerializer {
private void toSlime(Run run, Cursor runObject) {
runObject.setString(applicationField, run.id().application().serializedForm());
- runObject.setString(jobTypeField, run.id().type().jobName());
+ runObject.setString(jobTypeField, run.id().type().serialized(system));
runObject.setBool(isRedeploymentField, run.isRedeployment());
runObject.setLong(numberField, run.id().number());
runObject.setLong(startField, run.start().toEpochMilli());
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java
index bba9e4fb1f9..572867ea797 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java
@@ -708,7 +708,7 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler {
propertyEquals(request, "application", ApplicationName::from, notification.source().application()) &&
propertyEquals(request, "instance", InstanceName::from, notification.source().instance()) &&
propertyEquals(request, "zone", ZoneId::from, notification.source().zoneId()) &&
- propertyEquals(request, "job", JobType::fromJobName, notification.source().jobType()) &&
+ propertyEquals(request, "job", job -> JobType.fromJobName(job, controller.zoneRegistry()), notification.source().jobType()) &&
propertyEquals(request, "type", Notification.Type::valueOf, Optional.of(notification.type())) &&
propertyEquals(request, "level", Notification.Level::valueOf, Optional.of(notification.level())))
.forEach(notification -> toSlime(notificationsArray.addObject(), notification, includeTenantFieldInResponse, excludeMessages));
@@ -2694,11 +2694,11 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler {
return ApplicationId.from(path.get("tenant"), path.get("application"), path.get("instance"));
}
- private static JobType jobTypeFromPath(Path path) {
- return JobType.fromJobName(path.get("jobtype"));
+ private JobType jobTypeFromPath(Path path) {
+ return JobType.fromJobName(path.get("jobtype"), controller.zoneRegistry());
}
- private static RunId runIdFromPath(Path path) {
+ private RunId runIdFromPath(Path path) {
long number = Long.parseLong(path.get("number"));
return new RunId(appIdFromPath(path), jobTypeFromPath(path), number);
}
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/deployment/BadgeApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/deployment/BadgeApiHandler.java
index eb74f931b2c..3078eb3cb24 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/deployment/BadgeApiHandler.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/deployment/BadgeApiHandler.java
@@ -90,7 +90,7 @@ public class BadgeApiHandler extends ThreadedHttpRequestHandler {
/** Returns a URI which points to a history badge for the given application and job type. */
private HttpResponse historyBadge(String tenant, String application, String instance, String jobName, String historyLength) {
ApplicationId id = ApplicationId.from(tenant, application, instance);
- JobType type = JobType.fromJobName(jobName);
+ JobType type = JobType.fromJobName(jobName, controller.zoneRegistry());
int length = historyLength == null ? 5 : Math.min(32, Math.max(0, Integer.parseInt(historyLength)));
return cachedResponse(new Key(id, type, length),
controller.clock().instant(),
@@ -135,7 +135,7 @@ public class BadgeApiHandler extends ThreadedHttpRequestHandler {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Key key = (Key) o;
- return historyLength == key.historyLength && id.equals(key.id) && type == key.type;
+ return historyLength == key.historyLength && id.equals(key.id) && type.equals(key.type);
}
@Override
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/filter/AthenzRoleFilter.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/filter/AthenzRoleFilter.java
index a7472ced09c..43037322f22 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/filter/AthenzRoleFilter.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/filter/AthenzRoleFilter.java
@@ -21,6 +21,7 @@ import com.yahoo.vespa.hosted.controller.TenantController;
import com.yahoo.vespa.hosted.controller.api.integration.athenz.ApplicationAction;
import com.yahoo.vespa.hosted.controller.api.integration.athenz.AthenzClientFactory;
import com.yahoo.vespa.hosted.controller.api.integration.deployment.JobType;
+import com.yahoo.vespa.hosted.controller.api.integration.zone.ZoneRegistry;
import com.yahoo.vespa.hosted.controller.api.role.Role;
import com.yahoo.vespa.hosted.controller.api.role.SecurityContext;
import com.yahoo.vespa.hosted.controller.athenz.impl.AthenzFacade;
@@ -62,6 +63,7 @@ public class AthenzRoleFilter extends JsonSecurityRequestFilterBase {
private final TenantController tenants;
private final ExecutorService executor;
private final SystemName systemName;
+ private final ZoneRegistry zones;
@Inject
public AthenzRoleFilter(AthenzClientFactory athenzClientFactory, Controller controller) {
@@ -69,6 +71,7 @@ public class AthenzRoleFilter extends JsonSecurityRequestFilterBase {
this.tenants = controller.tenants();
this.executor = Executors.newCachedThreadPool();
this.systemName = controller.system();
+ this.zones = controller.zoneRegistry();
}
@Override
@@ -108,8 +111,7 @@ public class AthenzRoleFilter extends JsonSecurityRequestFilterBase {
} else if(path.matches("/application/v4/tenant/{tenant}/application/{application}/environment/{environment}/region/{region}/{*}")) {
zone = Optional.of(ZoneId.from(path.get("environment"), path.get("region")));
} else if(path.matches("/application/v4/tenant/{tenant}/application/{application}/instance/{instance}/deploy/{jobname}")) {
- var jobtype= JobType.fromJobName(path.get("jobname"));
- zone = Optional.of(jobtype.zone(systemName));
+ zone = Optional.of(JobType.fromJobName(path.get("jobname"), zones).zone(systemName));
} else {
zone = Optional.empty();
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentContext.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentContext.java
index 899e567d7cc..f18733fbcde 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentContext.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentContext.java
@@ -476,7 +476,7 @@ public class DeploymentContext {
}
Run run = jobs.active().stream()
- .filter(r -> r.id().type() == type)
+ .filter(r -> r.id().type().equals(type))
.findAny()
.orElseThrow(() -> new AssertionError(type + " is not among the active: " + jobs.active()));
return run.id();
@@ -499,12 +499,12 @@ public class DeploymentContext {
public void assertRunning(JobType type) {
assertTrue(jobId(type) + " should be among the active: " + jobs.active(),
- jobs.active().stream().anyMatch(run -> run.id().application().equals(instanceId) && run.id().type() == type));
+ jobs.active().stream().anyMatch(run -> run.id().application().equals(instanceId) && run.id().type().equals(type)));
}
public void assertNotRunning(JobType type) {
assertFalse(jobId(type) + " should not be among the active: " + jobs.active(),
- jobs.active().stream().anyMatch(run -> run.id().application().equals(instanceId) && run.id().type() == type));
+ jobs.active().stream().anyMatch(run -> run.id().application().equals(instanceId) && run.id().type().equals(type)));
}
/** Deploys tester and real app, and completes tester and initial staging installation first if needed. */
@@ -522,7 +522,7 @@ public class DeploymentContext {
if (job.type().isTest())
doInstallTester(job);
- if (job.type() == JobType.stagingTest) { // Do the initial deployment and installation of the real application.
+ if (job.type().equals(JobType.stagingTest)) { // Do the initial deployment and installation of the real application.
assertEquals(unfinished, jobs.run(id).get().stepStatuses().get(Step.installInitialReal));
tester.configServer().nodeRepository().doUpgrade(deployment, Optional.empty(), tester.configServer().application(job.application(), zone).get().version().get());
configServer().convergeServices(id.application(), zone);
@@ -555,7 +555,7 @@ public class DeploymentContext {
/** Returns the current run for the given job type, and verifies it is still running normally. */
private Run currentRun(JobId job) {
Run run = jobs.last(job)
- .filter(r -> r.id().type() == job.type())
+ .filter(r -> r.id().type().equals(job.type()))
.orElseThrow(() -> new AssertionError(job.type() + " is not among the active: " + jobs.active()));
assertFalse(run.id() + " should not have failed yet: " + run, run.hasFailed());
assertFalse(run.id() + " should not have ended yet: " + run, run.hasEnded());
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/CloudTrialExpirerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/CloudTrialExpirerTest.java
index a4221ff3564..7f2799b6f58 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/CloudTrialExpirerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/CloudTrialExpirerTest.java
@@ -83,7 +83,7 @@ public class CloudTrialExpirerTest {
.withSystem(tester.zoneRegistry().system())
.withId("prod." + regionName)
.build();
- tester.zoneRegistry().setZones(zone);
+ tester.zoneRegistry().setZones(ZoneApiMock.fromId("test.aws-us-east-1c"), ZoneApiMock.fromId("staging.aws-us-east-1c"), zone);
var app = tester.createApplication(tenantName, appName, instanceName);
var ctx = deploymentTester.newDeploymentContext(tenantName, appName, instanceName);
var pkg = new ApplicationPackageBuilder()
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/JobRunnerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/JobRunnerTest.java
index 8b155644fb4..9ccd7244392 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/JobRunnerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/JobRunnerTest.java
@@ -86,7 +86,7 @@ public class JobRunnerTest {
public void multiThreadedExecutionFinishes() {
DeploymentTester tester = new DeploymentTester();
JobController jobs = tester.controller().jobController();
- StepRunner stepRunner = (step, id) -> id.type() == stagingTest && step.get() == startTests? Optional.of(error) : Optional.of(running);
+ StepRunner stepRunner = (step, id) -> id.type().equals(stagingTest) && step.get() == startTests? Optional.of(error) : Optional.of(running);
Phaser phaser = new Phaser(1);
JobRunner runner = new JobRunner(tester.controller(), Duration.ofDays(1), phasedExecutor(phaser), stepRunner);
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/NotificationsSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/NotificationsSerializerTest.java
index cbb595d2a3b..0c8a773a132 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/NotificationsSerializerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/NotificationsSerializerTest.java
@@ -16,6 +16,7 @@ import java.io.IOException;
import java.time.Instant;
import java.util.List;
+import static com.yahoo.config.provision.SystemName.main;
import static org.junit.Assert.assertEquals;
/**
@@ -25,6 +26,7 @@ public class NotificationsSerializerTest {
@Test
public void serialization_test() throws IOException {
+ NotificationsSerializer serializer = new NotificationsSerializer(main);
TenantName tenantName = TenantName.from("tenant1");
List<Notification> notifications = List.of(
new Notification(Instant.ofEpochSecond(1234),
@@ -38,7 +40,7 @@ public class NotificationsSerializerTest {
NotificationSource.from(new RunId(ApplicationId.from(tenantName.value(), "app1", "instance1"), JobType.systemTest, 12)),
List.of("Failed to deploy: Node allocation failure")));
- Slime serialized = NotificationsSerializer.toSlime(notifications);
+ Slime serialized = serializer.toSlime(notifications);
assertEquals("{\"notifications\":[" +
"{" +
"\"at\":1234000," +
@@ -53,11 +55,12 @@ public class NotificationsSerializerTest {
"\"messages\":[\"Failed to deploy: Node allocation failure\"]," +
"\"application\":\"app1\"," +
"\"instance\":\"instance1\"," +
- "\"jobId\":\"system-test\"," +
+ "\"jobId\":\"test.us-east-1\"," +
"\"runNumber\":12" +
"}]}", new String(SlimeUtils.toJsonBytes(serialized)));
- List<Notification> deserialized = NotificationsSerializer.fromSlime(tenantName, serialized);
+ List<Notification> deserialized = serializer.fromSlime(tenantName, serialized);
assertEquals(notifications, deserialized);
}
+
} \ No newline at end of file
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializerTest.java
index c63af87c08c..a3b7932197b 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializerTest.java
@@ -31,6 +31,7 @@ import java.util.Map;
import java.util.Optional;
import java.util.OptionalLong;
+import static com.yahoo.config.provision.SystemName.main;
import static com.yahoo.vespa.hosted.controller.deployment.RunStatus.aborted;
import static com.yahoo.vespa.hosted.controller.deployment.RunStatus.running;
import static com.yahoo.vespa.hosted.controller.deployment.Step.Status.failed;
@@ -58,7 +59,7 @@ import static org.junit.Assert.assertTrue;
public class RunSerializerTest {
- private static final RunSerializer serializer = new RunSerializer();
+ private static final RunSerializer serializer = new RunSerializer(main);
private static final Path runFile = Paths.get("src/test/java/com/yahoo/vespa/hosted/controller/persistence/testdata/run-status.json");
private static final RunId id = new RunId(ApplicationId.from("tenant", "application", "default"),
JobType.productionUsEast3,
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/responses/root.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/responses/root.json
index f09b60efacc..9c34f9410ee 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/responses/root.json
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/responses/root.json
@@ -353,25 +353,21 @@
"jobs": [
"system-test",
"staging-test",
- "production-us-east-3",
- "test-us-east-3",
- "production-us-west-1",
- "test-us-west-1",
- "production-us-central-1",
- "test-us-central-1",
+ "production-aws-us-east-1a",
+ "test-aws-us-east-1a",
"production-ap-northeast-1",
"test-ap-northeast-1",
"production-ap-northeast-2",
"test-ap-northeast-2",
"production-ap-southeast-1",
"test-ap-southeast-1",
+ "production-us-east-3",
+ "test-us-east-3",
+ "production-us-west-1",
+ "test-us-west-1",
+ "production-us-central-1",
+ "test-us-central-1",
"production-eu-west-1",
- "test-eu-west-1",
- "production-aws-us-east-1a",
- "test-aws-us-east-1a",
- "production-aws-us-west-2a",
- "test-aws-us-west-2a",
- "production-aws-us-east-1b",
- "test-aws-us-east-1b"
+ "test-eu-west-1"
]
}