summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/FailureRedeployer.java6
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/FailureRedeployerTest.java26
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/testdata/pr-instance-with-dead-locked-job.json23
3 files changed, 54 insertions, 1 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/FailureRedeployer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/FailureRedeployer.java
index 6c57c9423ff..2c048bfa3ce 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/FailureRedeployer.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/FailureRedeployer.java
@@ -3,6 +3,7 @@ package com.yahoo.vespa.hosted.controller.maintenance;
import com.yahoo.vespa.hosted.controller.Application;
import com.yahoo.vespa.hosted.controller.Controller;
+import com.yahoo.vespa.hosted.controller.application.ApplicationList;
import com.yahoo.vespa.hosted.controller.application.JobStatus;
import java.time.Duration;
@@ -15,6 +16,7 @@ import java.util.Optional;
* Attempts redeployment of failed jobs and deployments.
*
* @author bratseth
+ * @author mpolden
*/
public class FailureRedeployer extends Maintainer {
@@ -26,7 +28,9 @@ public class FailureRedeployer extends Maintainer {
@Override
public void maintain() {
- List<Application> applications = controller().applications().asList();
+ List<Application> applications = ApplicationList.from(controller().applications().asList())
+ .notPullRequest()
+ .asList();
retryFailingJobs(applications);
retryStuckJobs(applications);
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/FailureRedeployerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/FailureRedeployerTest.java
index 38ddd8a4a1b..fd7a3605766 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/FailureRedeployerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/FailureRedeployerTest.java
@@ -296,4 +296,30 @@ public class FailureRedeployerTest {
assertFalse("Change deployed", tester.application(application.id()).deploying().isPresent());
}
+ @Test
+ public void ignoresPullRequestInstances() throws Exception {
+ DeploymentTester tester = new DeploymentTester();
+ tester.controllerTester().getZoneRegistryMock().setSystem(SystemName.cd);
+
+ // Current system version, matches version in test data
+ Version version = Version.fromString("6.42.1");
+ tester.configServerClientMock().setDefaultConfigServerVersion(version);
+ tester.updateVersionStatus(version);
+ assertEquals(version, tester.controller().versionStatus().systemVersion().get().versionNumber());
+
+ // Load test data data
+ ApplicationSerializer serializer = new ApplicationSerializer();
+ byte[] json = Files.readAllBytes(Paths.get("src/test/java/com/yahoo/vespa/hosted/controller/maintenance/testdata/pr-instance-with-dead-locked-job.json"));
+ Slime slime = SlimeUtils.jsonToSlime(json);
+ Application application = serializer.fromSlime(slime);
+
+ try (Lock lock = tester.controller().applications().lock(application.id())) {
+ tester.controller().applications().store(application, lock);
+ }
+
+ // Failure redeployer does not restart deployment
+ tester.failureRedeployer().maintain();
+ assertTrue("No jobs scheduled", tester.buildSystem().jobs().isEmpty());
+ }
+
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/testdata/pr-instance-with-dead-locked-job.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/testdata/pr-instance-with-dead-locked-job.json
new file mode 100644
index 00000000000..32d34edd576
--- /dev/null
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/testdata/pr-instance-with-dead-locked-job.json
@@ -0,0 +1,23 @@
+{
+ "id": "tenant1:app1:default-pr1",
+ "deploymentSpecField": "<deployment version='1.0'>\n <test />\n <staging />\n <prod global-service-id=\"default\">\n <region active=\"true\">us-central-1</region>\n </prod>\n</deployment>\n",
+ "validationOverrides": "<deployment version='1.0'/>",
+ "deployments": [],
+ "deploymentJobs": {
+ "projectId": 0,
+ "jobStatus": [
+ {
+ "jobType": "system-test",
+ "lastTriggered": {
+ "version": "6.42.1",
+ "revision": {
+ "applicationPackageHash": "dead"
+ },
+ "upgrade": false,
+ "at": 1499075576005
+ }
+ }
+ ]
+ },
+ "outstandingChangeField": false
+}