summaryrefslogtreecommitdiffstats
path: root/controller-server/src
diff options
context:
space:
mode:
authorjonmv <venstad@gmail.com>2023-09-08 14:28:41 +0200
committerjonmv <venstad@gmail.com>2023-09-08 14:28:41 +0200
commit5b8ac53099efb36ced9ac00d3a0fe0e519e1f469 (patch)
treea9e35cc01a50da50bb209259574d669a353a83c8 /controller-server/src
parent8a9b19317d5ed16d0a6fd098f3665c4d2c7a90df (diff)
Store and show in /app/v4/ the change and dependent prod job triggering tests
Diffstat (limited to 'controller-server/src')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentStatus.java17
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTrigger.java45
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java9
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/Run.java6
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentUpgrader.java2
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelper.java14
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentExpirerTest.java2
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/JobRunnerTest.java3
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-overview-2.json40
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-overview.json20
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/overview-enclave.json34
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/staging-runs.json25
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/staging-test-log.json5
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/system-test-details.json5
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/system-test-job.json10
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/system-test-log.json5
16 files changed, 197 insertions, 45 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 ac896338643..02ecdcaad21 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
@@ -26,6 +26,7 @@ import com.yahoo.vespa.hosted.controller.api.integration.deployment.RevisionId;
import com.yahoo.vespa.hosted.controller.api.integration.zone.ZoneRegistry;
import com.yahoo.vespa.hosted.controller.application.Change;
import com.yahoo.vespa.hosted.controller.application.Deployment;
+import com.yahoo.vespa.hosted.controller.deployment.Run.Reason;
import com.yahoo.vespa.hosted.controller.versions.VersionStatus;
import com.yahoo.vespa.hosted.controller.versions.VespaVersion;
import com.yahoo.vespa.hosted.controller.versions.VespaVersion.Confidence;
@@ -308,7 +309,8 @@ public class DeploymentStatus {
jobs.merge(job, List.of(new Job(typeWithZone,
versions,
readiness.okAt(now) && jobs().get(job).get().isRunning() ? readiness.running() : readiness,
- change)), DeploymentStatus::union);
+ change,
+ null)), DeploymentStatus::union);
}
});
});
@@ -574,7 +576,7 @@ public class DeploymentStatus {
// which is the case when the next versions to run that test with is not the same as we want to deploy here.
List<Job> tests = job.type().isTest() ? null : jobs.get(new JobId(job.application(), JobType.productionTestOf(job.type().zone())));
readiness = tests != null && ! versions.targetsMatch(tests.get(0).versions) && readiness.okAt(now) ? readiness.blocked() : readiness;
- toRun.add(new Job(job.type(), versions, readiness, partial));
+ toRun.add(new Job(job.type(), versions, readiness, partial, null));
// Assume first partial change is applied before the second.
existingPlatform = Optional.of(versions.targetPlatform());
existingRevision = Optional.of(versions.targetRevision());
@@ -700,7 +702,8 @@ public class DeploymentStatus {
testJobs.merge(testJob, List.of(new Job(testJob.type(),
productionJob.versions(),
readiness.okAt(now) && jobs().get(testJob).get().isRunning() ? readiness.running() : readiness,
- productionJob.change)),
+ productionJob.change,
+ job)),
DeploymentStatus::union);
}
@@ -1192,12 +1195,14 @@ public class DeploymentStatus {
private final Versions versions;
private final Readiness readiness;
private final Change change;
+ private final JobId dependent;
- public Job(JobType type, Versions versions, Readiness readiness, Change change) {
+ public Job(JobType type, Versions versions, Readiness readiness, Change change, JobId dependent) {
this.type = type;
this.versions = type.isSystemTest() ? versions.withoutSources() : versions;
this.readiness = readiness;
this.change = change;
+ this.dependent = dependent;
}
public JobType type() {
@@ -1212,6 +1217,10 @@ public class DeploymentStatus {
return readiness;
}
+ public Reason reason() {
+ return new Reason(Optional.empty(), Optional.ofNullable(dependent), Optional.ofNullable(change));
+ }
+
@Override
public boolean equals(Object o) {
if (this == o) return true;
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTrigger.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTrigger.java
index 42044cf335a..e247d6baa09 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTrigger.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTrigger.java
@@ -22,6 +22,7 @@ import com.yahoo.vespa.hosted.controller.application.Deployment;
import com.yahoo.vespa.hosted.controller.application.TenantAndApplicationId;
import com.yahoo.vespa.hosted.controller.deployment.DeploymentStatus.DelayCause;
import com.yahoo.vespa.hosted.controller.deployment.DeploymentStatus.Readiness;
+import com.yahoo.vespa.hosted.controller.deployment.Run.Reason;
import java.math.BigDecimal;
import java.time.Clock;
@@ -185,7 +186,12 @@ public class DeploymentTrigger {
/** Attempts to trigger the given job. */
private boolean trigger(Job job) {
try {
- trigger(job, null);
+ log.log(Level.FINE, () -> "Triggering " + job);
+ applications().lockApplicationOrThrow(TenantAndApplicationId.from(job.applicationId()), application -> {
+ jobs.start(job.applicationId(), job.jobType, job.versions, false, job.reason);
+ applications().store(application.with(job.applicationId().instance(), instance ->
+ instance.withJobPause(job.jobType, OptionalLong.empty())));
+ });
return true;
}
catch (Exception e) {
@@ -194,16 +200,6 @@ public class DeploymentTrigger {
}
}
- /** Attempts to trigger the given job. */
- private void trigger(Job job, String reason) {
- log.log(Level.FINE, () -> "Triggering " + job);
- applications().lockApplicationOrThrow(TenantAndApplicationId.from(job.applicationId()), application -> {
- jobs.start(job.applicationId(), job.jobType, job.versions, false, Optional.ofNullable(reason));
- applications().store(application.with(job.applicationId().instance(), instance ->
- instance.withJobPause(job.jobType, OptionalLong.empty())));
- });
- }
-
/** Force triggering of a job for given instance, with same versions as last run. */
public JobId reTrigger(ApplicationId applicationId, JobType jobType, String reason) {
Application application = applications().requireApplication(TenantAndApplicationId.from(applicationId));
@@ -212,7 +208,8 @@ public class DeploymentTrigger {
JobStatus jobStatus = jobs.jobStatus(new JobId(applicationId, jobType));
Run last = jobStatus.lastTriggered()
.orElseThrow(() -> new IllegalArgumentException(job + " has never been triggered"));
- trigger(deploymentJob(instance, last.versions(), last.id().type(), jobStatus.isNodeAllocationFailure(), clock.instant()), reason);
+ trigger(deploymentJob(instance, last.versions(), last.id().type(), jobStatus.isNodeAllocationFailure(), clock.instant(),
+ new Reason(Optional.ofNullable(reason), last.reason().dependent(), last.reason().change())));
return job;
}
@@ -236,7 +233,7 @@ public class DeploymentTrigger {
if ( ! upgradeRevision && change.revision().isPresent()) change = change.withoutApplication();
if ( ! upgradePlatform && change.platform().isPresent()) change = change.withoutPlatform();
Versions versions = Versions.from(change, application, status.deploymentFor(job), status.fallbackPlatform(change, job));
- DeploymentStatus.Job toTrigger = new DeploymentStatus.Job(job.type(), versions, new Readiness(controller.clock().instant()), instance.change());
+ DeploymentStatus.Job toTrigger = new DeploymentStatus.Job(job.type(), versions, new Readiness(controller.clock().instant()), instance.change(), null);
Map<JobId, List<DeploymentStatus.Job>> testJobs = status.testJobs(Map.of(job, List.of(toTrigger)));
Map<JobId, List<DeploymentStatus.Job>> jobs = testJobs.isEmpty() || ! requireTests
@@ -245,13 +242,13 @@ public class DeploymentTrigger {
.filter(entry -> controller.jobController().last(entry.getKey()).map(Run::hasEnded).orElse(true))
.collect(toMap(Map.Entry::getKey, Map.Entry::getValue));
- jobs.forEach((jobId, versionsList) -> {
+ jobs.forEach((jobId, jobList) -> {
trigger(deploymentJob(application.require(jobId.application().instance()),
- versionsList.get(0).versions(),
+ jobList.get(0).versions(),
jobId.type(),
status.jobs().get(jobId).get().isNodeAllocationFailure(),
- clock.instant()),
- reason);
+ clock.instant(),
+ new Reason(Optional.of(reason), jobList.get(0).reason().dependent(), jobList.get(0).reason().change())));
});
return List.copyOf(jobs.keySet());
}
@@ -262,7 +259,7 @@ public class DeploymentTrigger {
last.versions().targetRevision(),
Optional.of(last.versions().targetPlatform()),
Optional.of(last.versions().targetRevision()));
- jobs.start(job.application(), job.type(), target, true, Optional.of(reason));
+ jobs.start(job.application(), job.type(), target, true, Reason.because(reason));
return List.of(job);
}
@@ -383,7 +380,8 @@ public class DeploymentTrigger {
job.versions(),
job.type(),
status.instanceJobs(jobId.application().instance()).get(jobId.type()).isNodeAllocationFailure(),
- job.readiness().at()));
+ job.readiness().at(),
+ job.reason()));
}
});
return Collections.unmodifiableList(jobs);
@@ -458,8 +456,8 @@ public class DeploymentTrigger {
// ---------- Version and job helpers ----------
- private Job deploymentJob(Instance instance, Versions versions, JobType jobType, boolean isNodeAllocationFailure, Instant availableSince) {
- return new Job(instance, versions, jobType, availableSince, isNodeAllocationFailure, instance.change().revision().isPresent());
+ private Job deploymentJob(Instance instance, Versions versions, JobType jobType, boolean isNodeAllocationFailure, Instant availableSince, Reason reason) {
+ return new Job(instance, versions, jobType, availableSince, isNodeAllocationFailure, instance.change().revision().isPresent(), reason);
}
// ---------- Data containers ----------
@@ -473,15 +471,17 @@ public class DeploymentTrigger {
private final Instant availableSince;
private final boolean isRetry;
private final boolean isApplicationUpgrade;
+ private final Run.Reason reason;
private Job(Instance instance, Versions versions, JobType jobType, Instant availableSince,
- boolean isRetry, boolean isApplicationUpgrade) {
+ boolean isRetry, boolean isApplicationUpgrade, Run.Reason reason) {
this.instanceId = instance.id();
this.jobType = jobType;
this.versions = versions;
this.availableSince = availableSince;
this.isRetry = isRetry;
this.isApplicationUpgrade = isApplicationUpgrade;
+ this.reason = reason;
}
ApplicationId applicationId() { return instanceId; }
@@ -489,6 +489,7 @@ public class DeploymentTrigger {
Instant availableSince() { return availableSince; } // TODO jvenstad: This is 95% broken now. Change.at() can restore it.
boolean isRetry() { return isRetry; }
boolean applicationUpgrade() { return isApplicationUpgrade; }
+ Reason reason() { return reason; }
@Override
public String toString() {
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java
index 589188bfc4f..0773c95e1f2 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java
@@ -699,12 +699,12 @@ public class JobController {
}
/** Orders a run of the given type, or throws an IllegalStateException if that job type is already running. */
- public void start(ApplicationId id, JobType type, Versions versions, boolean isRedeployment, Optional<String> reason) {
+ public void start(ApplicationId id, JobType type, Versions versions, boolean isRedeployment, Reason reason) {
start(id, type, versions, isRedeployment, JobProfile.of(type), reason);
}
/** Orders a run of the given type, or throws an IllegalStateException if that job type is already running. */
- public void start(ApplicationId id, JobType type, Versions versions, boolean isRedeployment, JobProfile profile, Optional<String> reason) {
+ public void start(ApplicationId id, JobType type, Versions versions, boolean isRedeployment, JobProfile profile, Reason reason) {
ApplicationVersion revision = controller.applications().requireApplication(TenantAndApplicationId.from(id)).revisions().get(versions.targetRevision());
if (revision.compileVersion()
.map(version -> controller.applications().versionCompatibility(id).refuse(versions.targetPlatform(), version))
@@ -718,8 +718,7 @@ public class JobController {
throw new IllegalArgumentException("Cannot start " + type + " for " + id + "; it is already running!");
RunId newId = new RunId(id, type, last.map(run -> run.id().number()).orElse(0L) + 1);
- curator.writeLastRun(Run.initial(newId, versions, isRedeployment, controller.clock().instant(), profile,
- new Reason(reason, Optional.empty(), Optional.empty())));
+ curator.writeLastRun(Run.initial(newId, versions, isRedeployment, controller.clock().instant(), profile, reason));
metric.jobStarted(newId.job());
});
}
@@ -777,7 +776,7 @@ public class JobController {
new Versions(targetPlatform, version.id(), lastRun.map(run -> run.versions().targetPlatform()), lastRun.map(run -> run.versions().targetRevision())),
false,
dryRun ? JobProfile.developmentDryRun : JobProfile.development,
- Optional.empty());
+ Reason.empty());
});
locked(id, type, __ -> {
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 12e04df4790..76ab154688f 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
@@ -344,6 +344,10 @@ public class Run {
throw new IllegalStateException("This run ended at " + end.get() + " -- it can't be further modified!");
}
- public record Reason(Optional<String> reason, Optional<JobId> dependent, Optional<Change> change) { }
+ public record Reason(Optional<String> reason, Optional<JobId> dependent, Optional<Change> change) {
+ private static final Reason empty = new Reason(Optional.empty(), Optional.empty(), Optional.empty());
+ public static Reason empty() { return empty; }
+ public static Reason because(String reason) { return new Reason(Optional.of(reason), Optional.empty(), Optional.empty()); }
+ }
}
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentUpgrader.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentUpgrader.java
index 8a3a2a11e09..82cac1e7520 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentUpgrader.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentUpgrader.java
@@ -71,7 +71,7 @@ public class DeploymentUpgrader extends ControllerMaintainer {
log.log(Level.FINE, "Upgrading deployment of " + instance.id() + " in " + deployment.zone());
attempts.incrementAndGet();
- controller().jobController().start(instance.id(), JobType.deploymentTo(deployment.zone()), target, true, Optional.of("automated upgrade"));
+ controller().jobController().start(instance.id(), JobType.deploymentTo(deployment.zone()), target, true, Run.Reason.because("automated upgrade"));
} catch (Exception e) {
failures.incrementAndGet();
log.log(Level.WARNING, "Failed upgrading " + deployment + " of " + instance +
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelper.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelper.java
index 140cc142ceb..7555a020edc 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelper.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelper.java
@@ -126,6 +126,13 @@ class JobControllerApiHandlerHelper {
detailsObject.setBool("active", ! run.hasEnded());
detailsObject.setString("status", nameOf(run.status()));
run.reason().reason().ifPresent(reason -> detailsObject.setString("reason", reason));
+ run.reason().dependent().ifPresent(dependent -> {
+ Cursor dependentObject = detailsObject.setObject("dependent");
+ dependentObject.setString("instance", dependent.application().instance().value());
+ dependentObject.setString("region", dependent.type().zone().region().value());
+ run.reason().change().flatMap(Change::platform).ifPresent(platform -> dependentObject.setString("platform", platform.toFullString()));
+ run.reason().change().flatMap(Change::revision).ifPresent(revision -> dependentObject.setLong("revision", revision.number()));
+ });
try {
jobController.updateTestLog(runId);
jobController.updateVespaLog(runId);
@@ -499,6 +506,13 @@ class JobControllerApiHandlerHelper {
run.end().ifPresent(end -> runObject.setLong("end", end.toEpochMilli()));
runObject.setString("status", nameOf(run.status()));
run.reason().reason().ifPresent(reason -> runObject.setString("reason", reason));
+ run.reason().dependent().ifPresent(dependent -> {
+ Cursor dependentObject = runObject.setObject("dependent");
+ dependentObject.setString("instance", dependent.application().instance().value());
+ dependentObject.setString("region", dependent.type().zone().region().value());
+ run.reason().change().flatMap(Change::platform).ifPresent(platform -> dependentObject.setString("platform", platform.toFullString()));
+ run.reason().change().flatMap(Change::revision).ifPresent(revision -> dependentObject.setLong("revision", revision.number()));
+ });
toSlime(runObject.setObject("versions"), run.versions(), application);
Cursor runStepsArray = runObject.setArray("steps");
run.steps().forEach((step, info) -> {
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentExpirerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentExpirerTest.java
index 0c238ea7c9d..f39374a2a89 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentExpirerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentExpirerTest.java
@@ -73,7 +73,7 @@ public class DeploymentExpirerTest {
// Dev application expires when enough time has passed since most recent attempt
// Redeployments done by DeploymentUpgrader do not affect this
tester.clock().advance(Duration.ofDays(12).plus(Duration.ofSeconds(1)));
- tester.jobs().start(devApp.instanceId(), DeploymentContext.devUsEast1, lastRun.versions(), true, Optional.of("upgrade"));
+ tester.jobs().start(devApp.instanceId(), DeploymentContext.devUsEast1, lastRun.versions(), true, Run.Reason.because("upgrade"));
expirer.maintain();
assertEquals(0, permanentDeployments(devApp.instance()));
assertEquals(1, permanentDeployments(prodApp.instance()));
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 b0fe2867ab7..3ee6c7aadc3 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
@@ -14,6 +14,7 @@ import com.yahoo.vespa.hosted.controller.deployment.JobController;
import com.yahoo.vespa.hosted.controller.deployment.JobMetrics;
import com.yahoo.vespa.hosted.controller.deployment.JobProfile;
import com.yahoo.vespa.hosted.controller.deployment.Run;
+import com.yahoo.vespa.hosted.controller.deployment.Run.Reason;
import com.yahoo.vespa.hosted.controller.deployment.RunStatus;
import com.yahoo.vespa.hosted.controller.deployment.Step;
import com.yahoo.vespa.hosted.controller.deployment.Step.Status;
@@ -423,7 +424,7 @@ public class JobRunnerTest {
}
private void start(JobController jobs, ApplicationId id, JobType type) {
- jobs.start(id, type, versions, false, Optional.empty());
+ jobs.start(id, type, versions, false, Reason.empty());
}
public static ExecutorService inThreadExecutor() {
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-overview-2.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-overview-2.json
index 19b3d5dc2d7..8a22a7500d4 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-overview-2.json
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-overview-2.json
@@ -167,6 +167,11 @@
"start": 14403000,
"end": 14403000,
"status": "success",
+ "dependent": {
+ "instance": "default",
+ "region": "us-central-1",
+ "revision": 3
+ },
"versions": {
"targetPlatform": "6.1.0",
"targetApplication": {
@@ -225,6 +230,11 @@
"start": 1000,
"end": 1000,
"status": "success",
+ "dependent": {
+ "instance": "default",
+ "region": "us-central-1",
+ "revision": 2
+ },
"versions": {
"targetPlatform": "6.1.0",
"targetApplication": {
@@ -283,6 +293,11 @@
"start": 0,
"end": 0,
"status": "success",
+ "dependent": {
+ "instance": "default",
+ "region": "us-central-1",
+ "revision": 1
+ },
"versions": {
"targetPlatform": "6.1.0",
"targetApplication": {
@@ -376,6 +391,11 @@
"start": 14503000,
"end": 14503000,
"status": "installationFailed",
+ "dependent": {
+ "instance": "default",
+ "region": "us-east-3",
+ "revision": 3
+ },
"versions": {
"targetPlatform": "6.1.0",
"targetApplication": {
@@ -457,6 +477,11 @@
"start": 14403000,
"end": 14403000,
"status": "installationFailed",
+ "dependent": {
+ "instance": "default",
+ "region": "us-east-3",
+ "revision": 3
+ },
"versions": {
"targetPlatform": "6.1.0",
"targetApplication": {
@@ -538,6 +563,11 @@
"start": 14403000,
"end": 14403000,
"status": "success",
+ "dependent": {
+ "instance": "default",
+ "region": "us-central-1",
+ "revision": 3
+ },
"versions": {
"targetPlatform": "6.1.0",
"targetApplication": {
@@ -619,6 +649,11 @@
"start": 1000,
"end": 1000,
"status": "success",
+ "dependent": {
+ "instance": "default",
+ "region": "us-central-1",
+ "revision": 2
+ },
"versions": {
"targetPlatform": "6.1.0",
"targetApplication": {
@@ -700,6 +735,11 @@
"start": 0,
"end": 0,
"status": "success",
+ "dependent": {
+ "instance": "default",
+ "region": "us-central-1",
+ "revision": 1
+ },
"versions": {
"targetPlatform": "6.1.0",
"targetApplication": {
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-overview.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-overview.json
index 1d115049b35..aa1ceaae2e8 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-overview.json
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-overview.json
@@ -79,6 +79,11 @@
"url": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/system-test/run/2",
"start": 1600000000000,
"status": "running",
+ "dependent": {
+ "instance": "instance1",
+ "region": "us-central-1",
+ "revision": 4
+ },
"versions": {
"targetPlatform": "6.1.0",
"targetApplication": {
@@ -137,6 +142,11 @@
"start": 1600000000000,
"end": 1600000000000,
"status": "success",
+ "dependent": {
+ "instance": "instance1",
+ "region": "us-central-1",
+ "revision": 1
+ },
"versions": {
"targetPlatform": "6.1.0",
"targetApplication": {
@@ -209,6 +219,11 @@
"url": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/staging-test/run/2",
"start": 1600000000000,
"status": "running",
+ "dependent": {
+ "instance": "instance1",
+ "region": "us-central-1",
+ "revision": 4
+ },
"versions": {
"targetPlatform": "6.1.0",
"targetApplication": {
@@ -283,6 +298,11 @@
"start": 1600000000000,
"end": 1600000000000,
"status": "success",
+ "dependent": {
+ "instance": "instance1",
+ "region": "us-central-1",
+ "revision": 1
+ },
"versions": {
"targetPlatform": "6.1.0",
"targetApplication": {
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/overview-enclave.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/overview-enclave.json
index 9d82ed97849..733326fc8d1 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/overview-enclave.json
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/overview-enclave.json
@@ -5,11 +5,11 @@
"steps": [
{
"type": "instance",
- "dependencies": [],
+ "dependencies": [ ],
"declared": true,
"instance": "default",
"readyAt": 0,
- "deploying": {},
+ "deploying": { },
"latestVersions": {
"platform": {
"platform": "6.1.0",
@@ -21,7 +21,7 @@
"upgrade": false
}
],
- "blockers": []
+ "blockers": [ ]
},
"application": {
"application": {
@@ -42,21 +42,21 @@
}
}
],
- "blockers": []
+ "blockers": [ ]
}
},
"delayCause": null
},
{
"type": "test",
- "dependencies": [],
+ "dependencies": [ ],
"declared": true,
"instance": "default",
"readyAt": 0,
"jobName": "staging-test",
"url": "https://some.url:43/instance/default/job/staging-test",
"environment": "staging",
- "toRun": [],
+ "toRun": [ ],
"enclave": {
"cloudAccount": "aws:123456789012"
},
@@ -67,6 +67,11 @@
"start": 1600000000000,
"end": 1600000000000,
"status": "success",
+ "dependent": {
+ "instance": "default",
+ "region": "aws-us-east-1c",
+ "revision": 1
+ },
"versions": {
"targetPlatform": "6.1.0",
"targetApplication": {
@@ -140,14 +145,14 @@
},
{
"type": "test",
- "dependencies": [],
+ "dependencies": [ ],
"declared": true,
"instance": "default",
"readyAt": 0,
"jobName": "system-test",
"url": "https://some.url:43/instance/default/job/system-test",
"environment": "test",
- "toRun": [],
+ "toRun": [ ],
"enclave": {
"cloudAccount": "aws:123456789012"
},
@@ -158,6 +163,11 @@
"start": 1600000000000,
"end": 1600000000000,
"status": "success",
+ "dependent": {
+ "instance": "default",
+ "region": "aws-us-east-1c",
+ "revision": 1
+ },
"versions": {
"targetPlatform": "6.1.0",
"targetApplication": {
@@ -215,7 +225,11 @@
},
{
"type": "deployment",
- "dependencies": [0, 1, 2],
+ "dependencies": [
+ 0,
+ 1,
+ 2
+ ],
"declared": true,
"instance": "default",
"readyAt": 1600000000000,
@@ -230,7 +244,7 @@
"sourceUrl": "repository1/tree/commit1",
"commit": "commit1"
},
- "toRun": [],
+ "toRun": [ ],
"enclave": {
"cloudAccount": "aws:123456789012"
},
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/staging-runs.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/staging-runs.json
index 6c966f0de4d..5c6b95c4651 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/staging-runs.json
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/staging-runs.json
@@ -6,6 +6,11 @@
"start": 14503000,
"end": 14503000,
"status": "installationFailed",
+ "dependent": {
+ "instance": "default",
+ "region": "us-east-3",
+ "revision": 3
+ },
"versions": {
"targetPlatform": "6.1.0",
"targetApplication": {
@@ -87,6 +92,11 @@
"start": 14403000,
"end": 14403000,
"status": "installationFailed",
+ "dependent": {
+ "instance": "default",
+ "region": "us-east-3",
+ "revision": 3
+ },
"versions": {
"targetPlatform": "6.1.0",
"targetApplication": {
@@ -168,6 +178,11 @@
"start": 14403000,
"end": 14403000,
"status": "success",
+ "dependent": {
+ "instance": "default",
+ "region": "us-central-1",
+ "revision": 3
+ },
"versions": {
"targetPlatform": "6.1.0",
"targetApplication": {
@@ -249,6 +264,11 @@
"start": 1000,
"end": 1000,
"status": "success",
+ "dependent": {
+ "instance": "default",
+ "region": "us-central-1",
+ "revision": 2
+ },
"versions": {
"targetPlatform": "6.1.0",
"targetApplication": {
@@ -330,6 +350,11 @@
"start": 0,
"end": 0,
"status": "success",
+ "dependent": {
+ "instance": "default",
+ "region": "us-central-1",
+ "revision": 1
+ },
"versions": {
"targetPlatform": "6.1.0",
"targetApplication": {
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/staging-test-log.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/staging-test-log.json
index ae44c851dc0..9a550170ae2 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/staging-test-log.json
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/staging-test-log.json
@@ -1,6 +1,11 @@
{
"active": false,
"status": "installationFailed",
+ "dependent": {
+ "instance": "default",
+ "region": "us-east-3",
+ "revision": 3
+ },
"log": {
"deployTester": [
{
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/system-test-details.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/system-test-details.json
index c79dcc99ecf..ffbbe3cc7b5 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/system-test-details.json
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/system-test-details.json
@@ -1,6 +1,11 @@
{
"active": false,
"status": "success",
+ "dependent": {
+ "instance": "instance1",
+ "region": "us-central-1",
+ "revision": 1
+ },
"log": {
"deployTester": [
{
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/system-test-job.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/system-test-job.json
index 1ac4658ce10..49f0155340d 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/system-test-job.json
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/system-test-job.json
@@ -5,6 +5,11 @@
"url": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/system-test/run/2",
"start": 1600000000000,
"status": "running",
+ "dependent": {
+ "instance": "instance1",
+ "region": "us-central-1",
+ "revision": 4
+ },
"versions": {
"targetPlatform": "6.1.0",
"targetApplication": {
@@ -63,6 +68,11 @@
"start": 1600000000000,
"end": 1600000000000,
"status": "success",
+ "dependent": {
+ "instance": "instance1",
+ "region": "us-central-1",
+ "revision": 1
+ },
"versions": {
"targetPlatform": "6.1.0",
"targetApplication": {
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/system-test-log.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/system-test-log.json
index 830512f2fcd..f284c1fecf2 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/system-test-log.json
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/system-test-log.json
@@ -1,6 +1,11 @@
{
"active": false,
"status": "success",
+ "dependent": {
+ "instance": "default",
+ "region": "us-central-1",
+ "revision": 1
+ },
"log": {
"deployTester": [
{