diff options
author | Jon Marius Venstad <jonmv@users.noreply.github.com> | 2020-10-26 10:43:24 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-26 10:43:24 +0100 |
commit | e1f0948bc98caba830c85138c4cff335e96fc3fc (patch) | |
tree | 5df7979c337cfd737ffebe46ed3ef27b2f9d057c | |
parent | b3468b28b2bfafff4794f5b35c71451db1d2186a (diff) | |
parent | 41ba2d8a54a7997270e0eb2c20b841a36e9d80d7 (diff) |
Merge pull request #15030 from vespa-engine/jonmv/account-for-first-production-zone-having-a-newer-version-than-change-when-computing-idle-test-job-runs
Fix corner case for system/staging test jobs
2 files changed, 43 insertions, 6 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 124b913eb01..b4904ca3cf8 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 @@ -646,12 +646,10 @@ public class DeploymentStatus { @Override public Optional<Instant> completedAt(Change change, Optional<JobId> dependent) { return RunList.from(job) - .matching(run -> change.platform().map(run.versions().targetPlatform()::equals).orElse(true)) - .matching(run -> change.application().map(run.versions().targetApplication()::equals).orElse(true)) - .matching(run -> dependent.flatMap(status::deploymentFor) - .map(deployment -> Versions.from(change, deployment)) - .map(run.versions()::targetsMatch) - .orElse(true)) + .matching(run -> run.versions().targetsMatch(Versions.from(change, + status.application, + dependent.flatMap(status::deploymentFor), + status.systemVersion))) .status(RunStatus.success) .asList().stream() .map(run -> run.end().get()) diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTriggerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTriggerTest.java index f1306b51b39..6e5a9ddc7ab 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTriggerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTriggerTest.java @@ -24,6 +24,7 @@ import java.time.Instant; import java.util.Collection; import java.util.EnumSet; import java.util.List; +import java.util.Map; import java.util.Optional; import java.util.OptionalLong; import java.util.stream.Collectors; @@ -1216,4 +1217,42 @@ public class DeploymentTriggerTest { app.assertNotRunning(stagingTest); } + @Test + public void testTriggeringOfIdleTestJobsWhenFirstDeploymentIsOnNewerVersionThanChange() { + ApplicationPackage applicationPackage = new ApplicationPackageBuilder().systemTest() + .stagingTest() + .region("us-east-3") + .region("us-west-1") + .build(); + var app = tester.newDeploymentContext().submit(applicationPackage).deploy(); + var appToAvoidVersionGC = tester.newDeploymentContext("g", "c", "default").submit().deploy(); + + Version version2 = new Version("7.8.9"); + Version version3 = new Version("8.9.10"); + tester.controllerTester().upgradeSystem(version2); + tester.deploymentTrigger().triggerChange(appToAvoidVersionGC.instanceId(), Change.of(version2)); + appToAvoidVersionGC.deployPlatform(version2); + + // app upgrades first zone to version3, and then the other two to version2. + tester.controllerTester().upgradeSystem(version3); + tester.deploymentTrigger().triggerChange(app.instanceId(), Change.of(version3)); + app.runJob(systemTest).runJob(stagingTest); + tester.triggerJobs(); + tester.upgrader().overrideConfidence(version3, VespaVersion.Confidence.broken); + tester.controllerTester().computeVersionStatus(); + tester.upgrader().run(); + assertEquals(Optional.of(version2), app.instance().change().platform()); + + app.runJob(systemTest) + .runJob(productionUsEast3) + .runJob(stagingTest) + .runJob(productionUsWest1); + + assertEquals(version3, app.instanceJobs().get(productionUsEast3).lastSuccess().get().versions().targetPlatform()); + assertEquals(version2, app.instanceJobs().get(productionUsWest1).lastSuccess().get().versions().targetPlatform()); + assertEquals(Map.of(), app.deploymentStatus().jobsToRun()); + assertEquals(Change.empty(), app.instance().change()); + assertEquals(List.of(), tester.jobs().active()); + } + } |