summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Marius Venstad <jonmv@users.noreply.github.com>2020-10-26 10:43:24 +0100
committerGitHub <noreply@github.com>2020-10-26 10:43:24 +0100
commite1f0948bc98caba830c85138c4cff335e96fc3fc (patch)
tree5df7979c337cfd737ffebe46ed3ef27b2f9d057c
parentb3468b28b2bfafff4794f5b35c71451db1d2186a (diff)
parent41ba2d8a54a7997270e0eb2c20b841a36e9d80d7 (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
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentStatus.java10
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTriggerTest.java39
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());
+ }
+
}