summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Marius Venstad <jvenstad@yahoo-inc.com>2018-01-04 15:59:38 +0100
committerJon Marius Venstad <jvenstad@yahoo-inc.com>2018-01-04 15:59:38 +0100
commite3991f998029c59918dcaf19de2de3c5309bcf04 (patch)
tree767d9f197a8d49caa02a25355557a0a96015e5b6
parentbcf738eab365824a62b56818a02d4147ee41cfc6 (diff)
Fix tests
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/BuildService.java22
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentQueue.java5
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTrigger.java6
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTriggerer.java24
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ControllerMaintenance.java4
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/screwdriver/ScrewdriverApiHandler.java4
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java35
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentQueueTest.java65
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTester.java10
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTriggerTest.java50
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTriggererTest.java111
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/ManualBuildService.java57
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/MockBuildService.java26
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/FailureRedeployerTest.java46
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OutstandingChangeDeployerTest.java8
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/UpgraderTest.java100
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ControllerContainerTest.java1
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/controller/responses/maintenance.json3
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/screwdriver/ScrewdriverApiTest.java17
19 files changed, 295 insertions, 299 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/BuildService.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/BuildService.java
index a721b8e142a..5e9c8d73b38 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/BuildService.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/BuildService.java
@@ -1,6 +1,8 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.hosted.controller.api.integration;
+import java.util.Objects;
+
/**
* @author jvenstad
*/
@@ -13,6 +15,7 @@ public interface BuildService {
*/
boolean trigger(BuildJob buildJob);
+
class BuildJob {
private final long projectId;
@@ -26,6 +29,25 @@ public interface BuildService {
public long projectId() { return projectId; }
public String jobName() { return jobName; }
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if ( ! (o instanceof BuildJob)) return false;
+ BuildJob buildJob = (BuildJob) o;
+ return projectId == buildJob.projectId &&
+ Objects.equals(jobName, buildJob.jobName);
+ }
+
+ @Override
+ public String toString() {
+ return jobName + "@" + projectId;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(projectId, jobName);
+ }
+
}
}
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentQueue.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentQueue.java
index d961915f532..4453175e91e 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentQueue.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentQueue.java
@@ -3,6 +3,7 @@ package com.yahoo.vespa.hosted.controller.deployment;
import com.google.common.collect.ImmutableList;
import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.searchlib.rankingexpression.rule.Function;
import com.yahoo.vespa.curator.Lock;
import com.yahoo.vespa.hosted.controller.Controller;
import com.yahoo.vespa.hosted.controller.api.integration.BuildService.BuildJob;
@@ -42,8 +43,8 @@ public class DeploymentQueue {
public List<BuildJob> jobs() {
ImmutableList.Builder<BuildJob> builder = ImmutableList.builder();
for (JobType jobType : JobType.values())
- locked(jobType, queue ->
- queue.forEach(id -> toBuildJob(id, jobType).ifPresent(builder::add)));
+ for (ApplicationId id : curator.readJobQueue(jobType))
+ toBuildJob(id, jobType).ifPresent(builder::add);
return builder.build();
}
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 41a9c81ef91..7c225d797df 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
@@ -50,13 +50,13 @@ public class DeploymentTrigger {
private final DeploymentQueue deploymentQueue;
private final DeploymentOrder order;
- public DeploymentTrigger(Controller controller, CuratorDb curator, Clock clock, DeploymentQueue deploymentQueue) {
+ public DeploymentTrigger(Controller controller, CuratorDb curator, Clock clock) {
Objects.requireNonNull(controller,"controller cannot be null");
Objects.requireNonNull(curator,"curator cannot be null");
Objects.requireNonNull(clock,"clock cannot be null");
this.controller = controller;
this.clock = clock;
- this.deploymentQueue = deploymentQueue;
+ this.deploymentQueue = new DeploymentQueue(controller, curator);
this.order = new DeploymentOrder(controller);
this.jobTimeout = controller.system().equals(SystemName.main) ? Duration.ofHours(12) : Duration.ofHours(1);
}
@@ -64,7 +64,7 @@ public class DeploymentTrigger {
/** Returns the time in the past before which jobs are at this moment considered unresponsive */
public Instant jobTimeoutLimit() { return clock.instant().minus(jobTimeout); }
- public DeploymentQueue buildSystem() { return deploymentQueue; }
+ public DeploymentQueue deploymentQueue() { return deploymentQueue; }
public DeploymentOrder deploymentOrder() { return order; }
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTriggerer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTriggerer.java
index 173f21bfca1..42824073f1c 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTriggerer.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTriggerer.java
@@ -25,31 +25,29 @@ public class DeploymentTriggerer extends Maintainer {
static final int triggeringRetries = 5;
private final BuildService buildService;
- private final DeploymentQueue deploymentQueue;
private final Executor executor;
- public DeploymentTriggerer(Controller controller, Duration triggeringInterval, JobControl jobControl,
- BuildService buildService, DeploymentQueue deploymentQueue) {
- this(controller, triggeringInterval, jobControl, buildService, deploymentQueue, Executors.newFixedThreadPool(20));
+ public DeploymentTriggerer(Controller controller, Duration triggeringInterval, JobControl jobControl, BuildService buildService) {
+ this(controller, triggeringInterval, jobControl, buildService, Executors.newFixedThreadPool(20));
}
DeploymentTriggerer(Controller controller, Duration triggeringInterval, JobControl jobControl,
- BuildService buildService, DeploymentQueue deploymentQueue, Executor executor) {
+ BuildService buildService, Executor executor) {
super(controller, triggeringInterval, jobControl);
this.buildService = buildService;
- this.deploymentQueue = deploymentQueue;
this.executor = executor;
}
@Override
protected void maintain() {
- deploymentQueue.takeJobsToRun().forEach(buildJob -> executor.execute(() -> {
- for (int i = 0; i < triggeringRetries; i++)
- if (buildService.trigger(buildJob))
- return;
-
- log.log(Level.WARNING, "Exhausted all " + triggeringRetries + " retries for " + buildJob + " without success.");
- }));
+ controller().applications().deploymentTrigger().deploymentQueue().takeJobsToRun()
+ .forEach(buildJob -> executor.execute(() -> {
+ for (int i = 0; i < triggeringRetries; i++)
+ if (buildService.trigger(buildJob))
+ return;
+
+ log.log(Level.WARNING, "Exhausted all " + triggeringRetries + " retries for " + buildJob + " without success.");
+ }));
}
}
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ControllerMaintenance.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ControllerMaintenance.java
index 5e76be9d384..bac388d3155 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ControllerMaintenance.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ControllerMaintenance.java
@@ -14,7 +14,6 @@ import com.yahoo.vespa.hosted.controller.maintenance.config.MaintainerConfig;
import com.yahoo.vespa.hosted.controller.persistence.CuratorDb;
import java.time.Duration;
-import java.util.concurrent.Executors;
/**
* Maintenance jobs of the controller.
@@ -60,8 +59,7 @@ public class ControllerMaintenance extends AbstractComponent {
deploymentMetricsMaintainer = new DeploymentMetricsMaintainer(controller, Duration.ofMinutes(10), jobControl);
applicationOwnershipConfirmer = new ApplicationOwnershipConfirmer(controller, Duration.ofHours(12), jobControl, ownershipIssues);
dnsMaintainer = new DnsMaintainer(controller, Duration.ofHours(1), jobControl, nameService);
- deploymentTriggerer = new DeploymentTriggerer(controller, Duration.ofSeconds(30), jobControl, buildService,
- controller.applications().deploymentTrigger().buildSystem());
+ deploymentTriggerer = new DeploymentTriggerer(controller, Duration.ofSeconds(30), jobControl, buildService);
}
public Upgrader upgrader() { return upgrader; }
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/screwdriver/ScrewdriverApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/screwdriver/ScrewdriverApiHandler.java
index 4d4f01bc1a6..c60c66a492b 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/screwdriver/ScrewdriverApiHandler.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/screwdriver/ScrewdriverApiHandler.java
@@ -76,7 +76,7 @@ public class ScrewdriverApiHandler extends LoggingRequestHandler {
return vespaVersion();
}
if (path.matches("/screwdriver/v1/jobsToRun")) {
- return buildJobs(controller.applications().deploymentTrigger().buildSystem().jobs());
+ return buildJobs(controller.applications().deploymentTrigger().deploymentQueue().jobs());
}
return notFound(request);
}
@@ -95,7 +95,7 @@ public class ScrewdriverApiHandler extends LoggingRequestHandler {
private HttpResponse delete(HttpRequest request) {
Path path = new Path(request.getUri().getPath());
if (path.matches("/screwdriver/v1/jobsToRun")) {
- return buildJobs(controller.applications().deploymentTrigger().buildSystem().takeJobsToRun());
+ return buildJobs(controller.applications().deploymentTrigger().deploymentQueue().takeJobsToRun());
}
return notFound(request);
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java
index 47c5280108f..a803832011e 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java
@@ -34,6 +34,7 @@ import com.yahoo.vespa.hosted.controller.application.DeploymentJobs.JobType;
import com.yahoo.vespa.hosted.controller.application.JobStatus;
import com.yahoo.vespa.hosted.controller.athenz.mock.AthenzDbMock;
import com.yahoo.vespa.hosted.controller.deployment.ApplicationPackageBuilder;
+import com.yahoo.vespa.hosted.controller.deployment.DeploymentQueue;
import com.yahoo.vespa.hosted.controller.deployment.DeploymentTester;
import com.yahoo.vespa.hosted.controller.persistence.ApplicationSerializer;
import com.yahoo.vespa.hosted.controller.rotation.RotationId;
@@ -433,7 +434,7 @@ public class ControllerTest {
Application app1 = tester.createApplication("app1", "tenant1", project1, 1L);
Application app2 = tester.createApplication("app2", "tenant2", project2, 1L);
Application app3 = tester.createApplication("app3", "tenant3", project3, 1L);
- BuildSystem buildSystem = tester.controller().applications().deploymentTrigger().buildSystem();
+ DeploymentQueue deploymentQueue = tester.controller().applications().deploymentTrigger().deploymentQueue();
// all applications: system-test completes successfully
tester.notifyJobCompletion(component, app1, true);
@@ -446,13 +447,13 @@ public class ControllerTest {
tester.deployAndNotify(app3, applicationPackage, true, systemTest);
// all applications: staging test jobs queued
- assertEquals(3, buildSystem.jobs().size());
+ assertEquals(3, deploymentQueue.jobs().size());
// app1: staging-test job fails with out of capacity and is added to the front of the queue
tester.deploy(stagingTest, app1, applicationPackage);
tester.notifyJobCompletion(stagingTest, app1, Optional.of(JobError.outOfCapacity));
- assertEquals(stagingTest.jobName(), buildSystem.jobs().get(0).jobName());
- assertEquals(project1, buildSystem.jobs().get(0).projectId());
+ assertEquals(stagingTest.jobName(), deploymentQueue.jobs().get(0).jobName());
+ assertEquals(project1, deploymentQueue.jobs().get(0).projectId());
// app2 and app3: Completes deployment
tester.deployAndNotify(app2, applicationPackage, true, stagingTest);
@@ -467,9 +468,9 @@ public class ControllerTest {
tester.notifyJobCompletion(component, app1, true);
tester.deployAndNotify(app1, applicationPackage, true, false, systemTest);
tester.deploy(stagingTest, app1, applicationPackage);
- assertEquals(1, buildSystem.takeJobsToRun().size());
+ assertEquals(1, deploymentQueue.takeJobsToRun().size());
tester.notifyJobCompletion(stagingTest, app1, Optional.of(JobError.outOfCapacity));
- assertTrue("No jobs queued", buildSystem.jobs().isEmpty());
+ assertTrue("No jobs queued", deploymentQueue.jobs().isEmpty());
// app2 and app3: New change triggers system-test jobs
// Provide a changed application package, too, or the deployment is a no-op.
@@ -479,26 +480,18 @@ public class ControllerTest {
tester.notifyJobCompletion(component, app3, true);
tester.deployAndNotify(app3, applicationPackage2, true, systemTest);
- assertEquals(2, buildSystem.jobs().size());
+ assertEquals(2, deploymentQueue.jobs().size());
- // app1: 4 hours pass in total, staging-test job is re-queued by periodic trigger mechanism and added at the
+ // app1: 4 hours pass in total, staging-test job for app1 is re-queued by periodic trigger mechanism and added at the
// back of the queue
tester.clock().advance(Duration.ofHours(3));
tester.clock().advance(Duration.ofMinutes(50));
tester.readyJobTrigger().maintain();
- List<BuildJob> nextJobs = buildSystem.takeJobsToRun();
- assertEquals(2, nextJobs.size());
- assertEquals(stagingTest.jobName(), nextJobs.get(0).jobName());
- assertEquals(project2, nextJobs.get(0).projectId());
- assertEquals(stagingTest.jobName(), nextJobs.get(1).jobName());
- assertEquals(project3, nextJobs.get(1).projectId());
-
- // And finally the requeued job for app1
- nextJobs = buildSystem.takeJobsToRun();
- assertEquals(1, nextJobs.size());
- assertEquals(stagingTest.jobName(), nextJobs.get(0).jobName());
- assertEquals(project1, nextJobs.get(0).projectId());
+ assertEquals(Collections.singletonList(new BuildJob(project2, stagingTest.jobName())), deploymentQueue.takeJobsToRun());
+ assertEquals(Collections.singletonList(new BuildJob(project3, stagingTest.jobName())), deploymentQueue.takeJobsToRun());
+ assertEquals(Collections.singletonList(new BuildJob(project1, stagingTest.jobName())), deploymentQueue.takeJobsToRun());
+ assertEquals(Collections.emptyList(), deploymentQueue.takeJobsToRun());
}
private void assertStatus(JobStatus expectedStatus, ApplicationId id, Controller controller) {
@@ -596,7 +589,7 @@ public class ControllerTest {
// Test environments pass
tester.deploy(DeploymentJobs.JobType.systemTest, application, applicationPackage);
- tester.buildSystem().takeJobsToRun();
+ tester.deploymentQueue().takeJobsToRun();
tester.clock().advance(Duration.ofMinutes(10));
tester.notifyJobCompletion(DeploymentJobs.JobType.systemTest, application, true);
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentQueueTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentQueueTest.java
index fa99ef5a03a..bd2250b4402 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentQueueTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentQueueTest.java
@@ -2,6 +2,7 @@
package com.yahoo.vespa.hosted.controller.deployment;
import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.vespa.hosted.controller.ControllerTester;
import com.yahoo.vespa.hosted.controller.api.integration.BuildService.BuildJob;
import com.yahoo.vespa.hosted.controller.application.ApplicationPackage;
import com.yahoo.vespa.hosted.controller.application.DeploymentJobs.JobType;
@@ -11,58 +12,54 @@ import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
import static org.junit.Assert.assertEquals;
/**
- * @author mpolden
+ * @author jvenstad
*/
-@RunWith(Parameterized.class)
public class DeploymentQueueTest {
- @Parameterized.Parameters(name = "jobType={0}")
- public static Iterable<?> capacityConstrainedJobs() {
- return Arrays.asList(JobType.systemTest, JobType.stagingTest);
- }
-
- private final JobType jobType;
-
- public DeploymentQueueTest(JobType jobType) {
- this.jobType = jobType;
- }
-
@Test
- public void throttle_capacity_constrained_jobs() {
+ public void testJobOffering() {
DeploymentTester tester = new DeploymentTester();
- DeploymentQueue deploymentQueue = new DeploymentQueue(tester.controller(), new MockCuratorDb());
+ DeploymentQueue deploymentQueue = new DeploymentQueue(tester.controller(), tester.controller().curator());
int project1 = 1;
int project2 = 2;
int project3 = 3;
- ApplicationPackage applicationPackage = new ApplicationPackageBuilder()
- .region("us-west-1")
- .build();
- ApplicationId app1 = tester.createAndDeploy("app1", project1, applicationPackage).id();
- ApplicationId app2 = tester.createAndDeploy("app2", project2, applicationPackage).id();
- ApplicationId app3 = tester.createAndDeploy("app3", project3, applicationPackage).id();
+
+ ApplicationId app1 = tester.createApplication("app1", "tenant", project1, null).id();
+ ApplicationId app2 = tester.createApplication("app2", "tenant", project2, null).id();
+ ApplicationId app3 = tester.createApplication("app3", "tenant", project3, null).id();
// Trigger jobs in capacity constrained environment
- deploymentQueue.addJob(app1, jobType, false);
- deploymentQueue.addJob(app2, jobType, false);
- deploymentQueue.addJob(app3, jobType, false);
+ deploymentQueue.addJob(app1, JobType.systemTest, false);
+ deploymentQueue.addJob(app2, JobType.systemTest, true);
+ deploymentQueue.addJob(app3, JobType.stagingTest, false);
+
+ // Trigger jobs in non-capacity constrained environment
+ deploymentQueue.addJob(app1, JobType.productionUsWest1, false);
+ deploymentQueue.addJob(app2, JobType.productionUsWest1, false);
+ deploymentQueue.addJob(app3, JobType.productionUsWest1, false);
+
+ assertEquals("Each offer contains a single job from each capacity constrained environment, and all other jobs.",
+ Arrays.asList(new BuildJob(project2, JobType.systemTest.jobName()),
+ new BuildJob(project3, JobType.stagingTest.jobName()),
+ new BuildJob(project1, JobType.productionUsWest1.jobName()),
+ new BuildJob(project2, JobType.productionUsWest1.jobName()),
+ new BuildJob(project3, JobType.productionUsWest1.jobName())),
+ deploymentQueue.takeJobsToRun());
- // A limited number of jobs are offered at a time:
- // First offer
- List<BuildJob> nextJobs = deploymentQueue.takeJobsToRun();
- assertEquals(2, nextJobs.size());
- assertEquals(project1, nextJobs.get(0).projectId());
- assertEquals(project2, nextJobs.get(1).projectId());
+ assertEquals("The system test job for project 1 was pushed back in the queue by that for project 2.",
+ Collections.singletonList(new BuildJob(project1, JobType.systemTest.jobName())),
+ deploymentQueue.takeJobsToRun());
- // Second offer
- nextJobs = deploymentQueue.takeJobsToRun();
- assertEquals(1, nextJobs.size());
- assertEquals(project3, nextJobs.get(0).projectId());
+ assertEquals("No jobs are left.",
+ Collections.emptyList(),
+ deploymentQueue.takeJobsToRun());
}
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTester.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTester.java
index 637d015b6ad..f3b3b8b0a0c 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTester.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTester.java
@@ -69,9 +69,7 @@ public class DeploymentTester {
public ApplicationController applications() { return tester.controller().applications(); }
- // TODO: This thing simulates the wrong thing: the build system won't hold the jobs that are running,
- // and so these should be consumed immediately upon triggering, and be "somewhere else" while running.
- public DeploymentQueue buildSystem() { return tester.controller().applications().deploymentTrigger().buildSystem(); }
+ public DeploymentQueue deploymentQueue() { return tester.controller().applications().deploymentTrigger().deploymentQueue(); }
public DeploymentTrigger deploymentTrigger() { return tester.controller().applications().deploymentTrigger(); }
@@ -260,18 +258,18 @@ public class DeploymentTester {
}
if (expectOnlyTheseJobs)
assertEquals(jobs.length, countJobsOf(application));
- buildSystem().removeJobs(application.id());
+ deploymentQueue().removeJobs(application.id());
}
private BuildService.BuildJob findJob(Application application, JobType jobType) {
- for (BuildService.BuildJob job : buildSystem().jobs())
+ for (BuildService.BuildJob job : deploymentQueue().jobs())
if (job.projectId() == application.deploymentJobs().projectId().get() && job.jobName().equals(jobType.jobName()))
return job;
throw new NoSuchElementException(jobType + " is not scheduled for " + application);
}
private int countJobsOf(Application application) {
- return (int)buildSystem().jobs().stream()
+ return (int) deploymentQueue().jobs().stream()
.filter(job -> job.projectId() == application.deploymentJobs().projectId().get())
.count();
}
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 94aaed6df63..a0faf6403d8 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
@@ -58,28 +58,28 @@ public class DeploymentTriggerTest {
// system-test fails and is retried
tester.deployAndNotify(app, applicationPackage, false, JobType.systemTest);
- assertEquals("Retried immediately", 1, tester.buildSystem().jobs().size());
+ assertEquals("Retried immediately", 1, tester.deploymentQueue().jobs().size());
tester.clock().advance(Duration.ofHours(1));
tester.deployAndNotify(app, applicationPackage, false, JobType.systemTest);
tester.clock().advance(Duration.ofHours(1));
- assertEquals("Nothing scheduled", 0, tester.buildSystem().jobs().size());
+ assertEquals("Nothing scheduled", 0, tester.deploymentQueue().jobs().size());
tester.readyJobTrigger().maintain(); // Causes retry of systemTests
- assertEquals("Scheduled retry", 1, tester.buildSystem().jobs().size());
+ assertEquals("Scheduled retry", 1, tester.deploymentQueue().jobs().size());
tester.deployAndNotify(app, applicationPackage, true, JobType.systemTest);
// staging-test times out and is retried
- tester.buildSystem().takeJobsToRun();
+ tester.deploymentQueue().takeJobsToRun();
tester.clock().advance(Duration.ofHours(12).plus(Duration.ofSeconds(1)));
tester.readyJobTrigger().maintain();
- assertEquals("Retried dead job", 1, tester.buildSystem().jobs().size());
- assertEquals(JobType.stagingTest.jobName(), tester.buildSystem().jobs().get(0).jobName());
+ assertEquals("Retried dead job", 1, tester.deploymentQueue().jobs().size());
+ assertEquals(JobType.stagingTest.jobName(), tester.deploymentQueue().jobs().get(0).jobName());
}
@Test
public void deploymentSpecDecidesTriggerOrder() {
DeploymentTester tester = new DeploymentTester();
- DeploymentQueue deploymentQueue = tester.buildSystem();
+ DeploymentQueue deploymentQueue = tester.deploymentQueue();
TenantId tenant = tester.controllerTester().createTenant("tenant1", "domain1", 1L);
Application application = tester.controllerTester().createApplication(tenant, "app1", "default", 1L);
ApplicationPackage applicationPackage = new ApplicationPackageBuilder()
@@ -104,7 +104,7 @@ public class DeploymentTriggerTest {
@Test
public void deploymentsSpecWithDelays() {
DeploymentTester tester = new DeploymentTester();
- DeploymentQueue deploymentQueue = tester.buildSystem();
+ DeploymentQueue deploymentQueue = tester.deploymentQueue();
Application application = tester.createApplication("app1", "tenant1", 1, 1L);
ApplicationPackage applicationPackage = new ApplicationPackageBuilder()
@@ -180,26 +180,26 @@ public class DeploymentTriggerTest {
tester.deployAndNotify(application, applicationPackage, true, JobType.stagingTest);
// Deploys in first region
- assertEquals(1, tester.buildSystem().jobs().size());
+ assertEquals(1, tester.deploymentQueue().jobs().size());
tester.deployAndNotify(application, applicationPackage, true, JobType.productionUsCentral1);
// Deploys in two regions in parallel
- assertEquals(2, tester.buildSystem().jobs().size());
- assertEquals(JobType.productionUsEast3.jobName(), tester.buildSystem().jobs().get(0).jobName());
- assertEquals(JobType.productionUsWest1.jobName(), tester.buildSystem().jobs().get(1).jobName());
- tester.buildSystem().takeJobsToRun();
+ assertEquals(2, tester.deploymentQueue().jobs().size());
+ assertEquals(JobType.productionUsEast3.jobName(), tester.deploymentQueue().jobs().get(0).jobName());
+ assertEquals(JobType.productionUsWest1.jobName(), tester.deploymentQueue().jobs().get(1).jobName());
+ tester.deploymentQueue().takeJobsToRun();
tester.deploy(JobType.productionUsWest1, application, applicationPackage, false);
tester.notifyJobCompletion(JobType.productionUsWest1, application, true);
- assertTrue("No more jobs triggered at this time", tester.buildSystem().jobs().isEmpty());
+ assertTrue("No more jobs triggered at this time", tester.deploymentQueue().jobs().isEmpty());
tester.deploy(JobType.productionUsEast3, application, applicationPackage, false);
tester.notifyJobCompletion(JobType.productionUsEast3, application, true);
// Last region completes
- assertEquals(1, tester.buildSystem().jobs().size());
+ assertEquals(1, tester.deploymentQueue().jobs().size());
tester.deployAndNotify(application, applicationPackage, true, JobType.productionEuWest1);
- assertTrue("All jobs consumed", tester.buildSystem().jobs().isEmpty());
+ assertTrue("All jobs consumed", tester.deploymentQueue().jobs().isEmpty());
}
@Test
@@ -235,7 +235,7 @@ public class DeploymentTriggerTest {
@Test
public void testSuccessfulDeploymentApplicationPackageChanged() {
DeploymentTester tester = new DeploymentTester();
- DeploymentQueue deploymentQueue = tester.buildSystem();
+ DeploymentQueue deploymentQueue = tester.deploymentQueue();
TenantId tenant = tester.controllerTester().createTenant("tenant1", "domain1", 1L);
Application application = tester.controllerTester().createApplication(tenant, "app1", "default", 1L);
ApplicationPackage previousApplicationPackage = new ApplicationPackageBuilder()
@@ -292,7 +292,7 @@ public class DeploymentTriggerTest {
tester.clock().advance(Duration.ofHours(1)); // --------------- Enter block window: 18:30
readyJobsTrigger.run();
- assertEquals(0, tester.buildSystem().jobs().size());
+ assertEquals(0, tester.deploymentQueue().jobs().size());
String searchDefinition =
"search test {\n" +
@@ -306,12 +306,12 @@ public class DeploymentTriggerTest {
tester.deployTestOnly(app, changedApplication);
readyJobsTrigger.run();
- assertEquals(0, tester.buildSystem().jobs().size());
+ assertEquals(0, tester.deploymentQueue().jobs().size());
tester.clock().advance(Duration.ofHours(2)); // ---------------- Exit block window: 20:30
tester.deploymentTrigger().triggerReadyJobs(); // Schedules the blocked production job(s)
- assertEquals(1, tester.buildSystem().jobs().size());
- BuildService.BuildJob productionJob = tester.buildSystem().takeJobsToRun().get(0);
+ assertEquals(1, tester.deploymentQueue().jobs().size());
+ BuildService.BuildJob productionJob = tester.deploymentQueue().takeJobsToRun().get(0);
assertEquals("production-us-west-1", productionJob.jobName());
}
@@ -324,16 +324,16 @@ public class DeploymentTriggerTest {
LockedApplication app = (LockedApplication)tester.createAndDeploy("default0", 3, "default");
// Store that we are upgrading but don't start the system-tests job
tester.controller().applications().store(app.withDeploying(Optional.of(new Change.VersionChange(Version.fromString("6.2")))));
- assertEquals(0, tester.buildSystem().jobs().size());
+ assertEquals(0, tester.deploymentQueue().jobs().size());
readyJobsTrigger.run();
- assertEquals(1, tester.buildSystem().jobs().size());
- assertEquals("system-test", tester.buildSystem().jobs().get(0).jobName());
+ assertEquals(1, tester.deploymentQueue().jobs().size());
+ assertEquals("system-test", tester.deploymentQueue().jobs().get(0).jobName());
}
@Test
public void testHandleMultipleNotificationsFromLastJob() {
DeploymentTester tester = new DeploymentTester();
- DeploymentQueue deploymentQueue = tester.buildSystem();
+ DeploymentQueue deploymentQueue = tester.deploymentQueue();
TenantId tenant = tester.controllerTester().createTenant("tenant1", "domain1", 1L);
Application application = tester.controllerTester().createApplication(tenant, "app1", "default", 1L);
ApplicationPackage applicationPackage = new ApplicationPackageBuilder()
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTriggererTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTriggererTest.java
index ba2eb10a8ca..f7e99f69ff7 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTriggererTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTriggererTest.java
@@ -2,16 +2,16 @@ package com.yahoo.vespa.hosted.controller.deployment;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.vespa.hosted.controller.api.integration.BuildService;
+import com.yahoo.vespa.hosted.controller.api.integration.BuildService.BuildJob;
+import com.yahoo.vespa.hosted.controller.application.DeploymentJobs;
import com.yahoo.vespa.hosted.controller.maintenance.JobControl;
import org.junit.Test;
import java.time.Duration;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
-import static com.yahoo.vespa.hosted.controller.application.DeploymentJobs.JobType.productionUsWest1;
-import static com.yahoo.vespa.hosted.controller.application.DeploymentJobs.JobType.systemTest;
import static org.junit.Assert.assertEquals;
/**
@@ -20,52 +20,67 @@ import static org.junit.Assert.assertEquals;
public class DeploymentTriggererTest {
@Test
- public void testTriggering() {
+ public void testMaintenance() {
DeploymentTester tester = new DeploymentTester();
JobControl jobControl = new JobControl(tester.controller().curator());
- DeploymentQueue deploymentQueue = new DeploymentTriggerer(tester.controller(),
- Duration.ofDays(1),
- jobControl,
- new MockBuildService(),
- Runnable::run);
-
- // Make sure the applications exist in the controller, as the build system uses this information.
- ApplicationId app1 = tester.createAndDeploy("app1", 1, "default-policy").id();
- ApplicationId app2 = tester.createAndDeploy("app2", 2, "default-policy").id();
- ApplicationId app3 = tester.createAndDeploy("app3", 3, "default-policy").id();
-
- // Trigger jobs in a capacity-constrained environment.
- deploymentQueue.addJob(app1, systemTest, false);
- deploymentQueue.addJob(app2, systemTest, false);
- deploymentQueue.addJob(app3, systemTest, false);
-
- // Trigger jobs in a non-constrained environment.
- deploymentQueue.addJob(app1, productionUsWest1, false);
- deploymentQueue.addJob(app2, productionUsWest1, false);
- deploymentQueue.addJob(app3, productionUsWest1, false);
-
- // A single capacity-constrained job is triggered each run.
- List<BuildService.BuildJob> nextJobs = deploymentQueue.takeJobsToRun();
- assertEquals(2, nextJobs.size());
- assertEquals(project1, nextJobs.get(0).projectId());
- assertEquals(project2, nextJobs.get(1).projectId());
-
- nextJobs = deploymentQueue.takeJobsToRun();
- assertEquals(1, nextJobs.size());
- assertEquals(project3, nextJobs.get(0).projectId());
- }
-
-
- private static class MockBuildService implements BuildService {
-
- private final Set<String> jobs = new HashSet<>();
-
- @Override
- public boolean trigger(BuildJob buildJob) {
- jobs.add(buildJob.jobName() + "@" + buildJob.projectId());
- return true;
- }
+ int project1 = 1;
+ int project2 = 2;
+ int project3 = 3;
+
+ ApplicationId app1 = tester.createApplication("app1", "tenant", project1, null).id();
+ ApplicationId app2 = tester.createApplication("app2", "tenant", project2, null).id();
+ ApplicationId app3 = tester.createApplication("app3", "tenant", project3, null).id();
+
+ // Create a BuildService which always rejects jobs from project2, but accepts and runs all others.
+ ArrayList<BuildJob> buildJobs = new ArrayList<>();
+ BuildService buildService = buildJob -> buildJob.projectId() == project2 ? false : buildJobs.add(buildJob);
+
+ DeploymentTriggerer triggerer = new DeploymentTriggerer(tester.controller(),
+ Duration.ofDays(1),
+ jobControl,
+ buildService,
+ Runnable::run);
+
+ triggerer.maintain();
+ assertEquals("No jobs are triggered initially.",
+ Collections.emptyList(),
+ buildJobs);
+
+ // Trigger jobs in capacity constrained environment
+ tester.deploymentQueue().addJob(app1, DeploymentJobs.JobType.systemTest, false);
+ tester.deploymentQueue().addJob(app2, DeploymentJobs.JobType.systemTest, false);
+ tester.deploymentQueue().addJob(app3, DeploymentJobs.JobType.systemTest, false);
+
+ // Trigger jobs in non-capacity constrained environment
+ tester.deploymentQueue().addJob(app1, DeploymentJobs.JobType.productionUsWest1, false);
+ tester.deploymentQueue().addJob(app2, DeploymentJobs.JobType.productionUsWest1, false);
+ tester.deploymentQueue().addJob(app3, DeploymentJobs.JobType.productionUsWest1, false);
+
+ triggerer.maintain();
+ assertEquals("One of each capacity constrained job and production jobs not for app2 are triggered after one maintenance run.",
+ Arrays.asList(new BuildJob(project1, DeploymentJobs.JobType.systemTest.jobName()),
+ new BuildJob(project1, DeploymentJobs.JobType.productionUsWest1.jobName()),
+ new BuildJob(project3, DeploymentJobs.JobType.productionUsWest1.jobName())),
+ buildJobs);
+
+ buildJobs.clear();
+ triggerer.maintain();
+ assertEquals("Next job in line fails to trigger in the build service.",
+ Collections.emptyList(),
+ buildJobs);
+
+ buildJobs.clear();
+ triggerer.maintain();
+ assertEquals("Next job which was waiting for capacity is triggered on next run.",
+ Collections.singletonList(new BuildJob(project3, DeploymentJobs.JobType.systemTest.jobName())),
+ buildJobs);
+
+ buildJobs.clear();
+ triggerer.maintain();
+ assertEquals("No jobs are left.",
+ Collections.emptyList(),
+ tester.deploymentQueue().takeJobsToRun());
}
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/ManualBuildService.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/ManualBuildService.java
deleted file mode 100644
index 51e3431b250..00000000000
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/ManualBuildService.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package com.yahoo.vespa.hosted.controller.deployment;
-
-import com.yahoo.config.provision.ApplicationId;
-import com.yahoo.vespa.hosted.controller.ApplicationController;
-import com.yahoo.vespa.hosted.controller.api.integration.BuildService;
-import com.yahoo.vespa.hosted.controller.application.DeploymentJobs.JobError;
-import com.yahoo.vespa.hosted.controller.application.DeploymentJobs.JobReport;
-import com.yahoo.vespa.hosted.controller.application.DeploymentJobs.JobType;
-
-import java.util.HashSet;
-import java.util.Optional;
-import java.util.Set;
-
-import static com.yahoo.vespa.hosted.controller.application.DeploymentJobs.JobError.unknown;
-
-/**
- * @author jvenstad
- */
-public class ManualBuildService implements BuildService {
-
- private final Set<BuildJob> jobs;
- private final ApplicationController applications;
-
- public ManualBuildService(ApplicationController applications) {
- this.applications = applications;
-
- jobs = new HashSet<>();
- }
-
- @Override
- public boolean trigger(BuildJob buildJob) {
- if (jobs.add(buildJob))
- throw new IllegalStateException("Asked to trigger " + buildJob + ", but this was already queued, which we try to avoid.");
- return true;
- }
-
- /** Complete the given job, and notify of completion. */
- public void complete(ApplicationId applicationId, JobType jobType) {
- if ( ! jobs.remove(new BuildJob(applications.require(applicationId).deploymentJobs().projectId().get(), jobType.jobName())))
- throw new IllegalArgumentException("Asked to complete " + jobType + " for " + applicationId + ", but this was not running.");
- }
-
- JobReport jobReport(ApplicationId applicationId, JobType jobType, boolean success) {
- return jobReport(applicationId, jobType, Optional.ofNullable(success ? null : unknown));
- }
-
- JobReport jobReport(ApplicationId applicationId, JobType jobType, Optional<JobError> jobError) {
- return new JobReport(
- applicationId,
- jobType,
- applications.require(applicationId).deploymentJobs().projectId().get(),
- 42,
- jobError
- );
- }
-
-}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/MockBuildService.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/MockBuildService.java
new file mode 100644
index 00000000000..33e396cc17c
--- /dev/null
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/MockBuildService.java
@@ -0,0 +1,26 @@
+package com.yahoo.vespa.hosted.controller.deployment;
+
+import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.vespa.hosted.controller.ApplicationController;
+import com.yahoo.vespa.hosted.controller.api.integration.BuildService;
+import com.yahoo.vespa.hosted.controller.application.DeploymentJobs.JobError;
+import com.yahoo.vespa.hosted.controller.application.DeploymentJobs.JobReport;
+import com.yahoo.vespa.hosted.controller.application.DeploymentJobs.JobType;
+
+import java.util.HashSet;
+import java.util.Optional;
+import java.util.Set;
+
+import static com.yahoo.vespa.hosted.controller.application.DeploymentJobs.JobError.unknown;
+
+/**
+ * @author jvenstad
+ */
+public class MockBuildService implements BuildService {
+
+ @Override
+ public boolean trigger(BuildJob buildJob) {
+ return true;
+ }
+
+}
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 fd00123c697..598c3b0bb3d 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
@@ -56,7 +56,7 @@ public class FailureRedeployerTest {
// Production job fails and is retried
tester.clock().advance(Duration.ofSeconds(1)); // Advance time so that we can detect jobs in progress
tester.deployAndNotify(app, applicationPackage, false, DeploymentJobs.JobType.productionUsEast3);
- assertEquals("Production job is retried", 1, tester.buildSystem().jobs().size());
+ assertEquals("Production job is retried", 1, tester.deploymentQueue().jobs().size());
assertEquals("Application has pending upgrade to " + version, version, tester.versionChange(app.id()).get().version());
// Another version is released, which cancels any pending upgrades to lower versions
@@ -64,13 +64,13 @@ public class FailureRedeployerTest {
tester.updateVersionStatus(version);
tester.deployAndNotify(app, applicationPackage, true, DeploymentJobs.JobType.productionUsEast3); // Finish previous production job.
tester.upgrader().maintain();
- assertEquals("Application starts upgrading to new version", 1, tester.buildSystem().jobs().size());
+ assertEquals("Application starts upgrading to new version", 1, tester.deploymentQueue().jobs().size());
assertEquals("Application has pending upgrade to " + version, version, tester.versionChange(app.id()).get().version());
// Failure redeployer does not retry failing job for prod.us-east-3 as there's an ongoing deployment
tester.clock().advance(Duration.ofMinutes(1));
tester.readyJobTrigger().maintain();
- assertFalse("Job is not retried", tester.buildSystem().jobs().stream()
+ assertFalse("Job is not retried", tester.deploymentQueue().jobs().stream()
.anyMatch(j -> j.jobName().equals(DeploymentJobs.JobType.productionUsEast3.jobName())));
// Test environments pass
@@ -79,20 +79,20 @@ public class FailureRedeployerTest {
// Production job fails again and exhausts all immediate retries
tester.deployAndNotify(app, applicationPackage, false, DeploymentJobs.JobType.productionUsEast3);
- tester.buildSystem().takeJobsToRun();
+ tester.deploymentQueue().takeJobsToRun();
tester.clock().advance(Duration.ofMinutes(10));
tester.notifyJobCompletion(DeploymentJobs.JobType.productionUsEast3, app, false);
- assertTrue("Retries exhausted", tester.buildSystem().jobs().isEmpty());
+ assertTrue("Retries exhausted", tester.deploymentQueue().jobs().isEmpty());
assertTrue("Failure is recorded", tester.application(app.id()).deploymentJobs().hasFailures());
// Failure redeployer retries job
tester.clock().advance(Duration.ofMinutes(5));
tester.readyJobTrigger().maintain();
- assertEquals("Job is retried", 1, tester.buildSystem().jobs().size());
+ assertEquals("Job is retried", 1, tester.deploymentQueue().jobs().size());
// Production job finally succeeds
tester.deployAndNotify(app, applicationPackage, true, DeploymentJobs.JobType.productionUsEast3);
- assertTrue("All jobs consumed", tester.buildSystem().jobs().isEmpty());
+ assertTrue("All jobs consumed", tester.deploymentQueue().jobs().isEmpty());
assertFalse("No failures", tester.application(app.id()).deploymentJobs().hasFailures());
}
@@ -110,20 +110,20 @@ public class FailureRedeployerTest {
tester.deployAndNotify(app, applicationPackage, true, DeploymentJobs.JobType.systemTest);
// staging-test starts, but does not complete
- assertEquals(DeploymentJobs.JobType.stagingTest.jobName(), tester.buildSystem().takeJobsToRun().get(0).jobName());
+ assertEquals(DeploymentJobs.JobType.stagingTest.jobName(), tester.deploymentQueue().takeJobsToRun().get(0).jobName());
tester.readyJobTrigger().maintain();
- assertTrue("No jobs retried", tester.buildSystem().jobs().isEmpty());
+ assertTrue("No jobs retried", tester.deploymentQueue().jobs().isEmpty());
// Just over 12 hours pass, job is retried
tester.clock().advance(Duration.ofHours(12).plus(Duration.ofSeconds(1)));
tester.readyJobTrigger().maintain();
- assertEquals(DeploymentJobs.JobType.stagingTest.jobName(), tester.buildSystem().takeJobsToRun().get(0).jobName());
+ assertEquals(DeploymentJobs.JobType.stagingTest.jobName(), tester.deploymentQueue().takeJobsToRun().get(0).jobName());
// Deployment completes
tester.deploy(DeploymentJobs.JobType.stagingTest, app, applicationPackage, true);
tester.notifyJobCompletion(DeploymentJobs.JobType.stagingTest, app, true);
tester.deployAndNotify(app, applicationPackage, true, DeploymentJobs.JobType.productionUsEast3);
- assertTrue("All jobs consumed", tester.buildSystem().jobs().isEmpty());
+ assertTrue("All jobs consumed", tester.deploymentQueue().jobs().isEmpty());
}
@Test
@@ -152,10 +152,10 @@ public class FailureRedeployerTest {
// system-test fails and exhausts all immediate retries
tester.deployAndNotify(app, applicationPackage, false, DeploymentJobs.JobType.systemTest);
- tester.buildSystem().takeJobsToRun();
+ tester.deploymentQueue().takeJobsToRun();
tester.clock().advance(Duration.ofMinutes(10));
tester.notifyJobCompletion(DeploymentJobs.JobType.systemTest, app, false);
- assertTrue("Retries exhausted", tester.buildSystem().jobs().isEmpty());
+ assertTrue("Retries exhausted", tester.deploymentQueue().jobs().isEmpty());
// Another version is released
version = Version.fromString("5.2");
@@ -165,12 +165,12 @@ public class FailureRedeployerTest {
assertEquals("Application has pending upgrade to " + version, version, tester.versionChange(app.id()).get().version());
// Consume system-test job for 5.2
- tester.buildSystem().takeJobsToRun();
+ tester.deploymentQueue().takeJobsToRun();
// Failure re-deployer does not retry failing system-test job as it failed for an older change
tester.clock().advance(Duration.ofMinutes(5));
tester.readyJobTrigger().maintain();
- assertTrue("No jobs retried", tester.buildSystem().jobs().isEmpty());
+ assertTrue("No jobs retried", tester.deploymentQueue().jobs().isEmpty());
}
@Test
@@ -202,23 +202,23 @@ public class FailureRedeployerTest {
// Test environments pass
tester.deploy(DeploymentJobs.JobType.systemTest, application, applicationPackage);
- tester.buildSystem().takeJobsToRun();
+ tester.deploymentQueue().takeJobsToRun();
tester.clock().advance(Duration.ofMinutes(10));
tester.notifyJobCompletion(DeploymentJobs.JobType.systemTest, application, true);
tester.deploy(DeploymentJobs.JobType.stagingTest, application, applicationPackage);
- tester.buildSystem().takeJobsToRun();
+ tester.deploymentQueue().takeJobsToRun();
tester.clock().advance(Duration.ofMinutes(10));
tester.notifyJobCompletion(DeploymentJobs.JobType.stagingTest, application, true);
// Production job starts, but does not complete
- assertEquals(1, tester.buildSystem().jobs().size());
- assertEquals("Production job triggered", DeploymentJobs.JobType.productionCdUsCentral1.jobName(), tester.buildSystem().jobs().get(0).jobName());
- tester.buildSystem().takeJobsToRun();
+ assertEquals(1, tester.deploymentQueue().jobs().size());
+ assertEquals("Production job triggered", DeploymentJobs.JobType.productionCdUsCentral1.jobName(), tester.deploymentQueue().jobs().get(0).jobName());
+ tester.deploymentQueue().takeJobsToRun();
// Failure re-deployer runs
tester.readyJobTrigger().maintain();
- assertTrue("No jobs retried", tester.buildSystem().jobs().isEmpty());
+ assertTrue("No jobs retried", tester.deploymentQueue().jobs().isEmpty());
// Deployment completes
tester.notifyJobCompletion(DeploymentJobs.JobType.productionCdUsCentral1, application, true);
@@ -243,7 +243,7 @@ public class FailureRedeployerTest {
// Failure redeployer does not restart deployment
tester.readyJobTrigger().maintain();
- assertTrue("No jobs scheduled", tester.buildSystem().jobs().isEmpty());
+ assertTrue("No jobs scheduled", tester.deploymentQueue().jobs().isEmpty());
}
@Test
@@ -263,7 +263,7 @@ public class FailureRedeployerTest {
// Failure redeployer does not restart deployment
tester.readyJobTrigger().maintain();
- assertTrue("No jobs scheduled", tester.buildSystem().jobs().isEmpty());
+ assertTrue("No jobs scheduled", tester.deploymentQueue().jobs().isEmpty());
}
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OutstandingChangeDeployerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OutstandingChangeDeployerTest.java
index 13636122cfd..65a90de1a16 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OutstandingChangeDeployerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OutstandingChangeDeployerTest.java
@@ -37,16 +37,16 @@ public class OutstandingChangeDeployerTest {
assertFalse(tester.application("app1").hasOutstandingChange());
tester.notifyJobCompletion(DeploymentJobs.JobType.component, tester.application("app1"), true);
assertTrue(tester.application("app1").hasOutstandingChange());
- assertEquals(1, tester.buildSystem().jobs().size());
+ assertEquals(1, tester.deploymentQueue().jobs().size());
deployer.maintain();
- assertEquals("No effect as job is in progress", 1, tester.buildSystem().jobs().size());
+ assertEquals("No effect as job is in progress", 1, tester.deploymentQueue().jobs().size());
tester.deployCompletely("app1");
- assertEquals("Upgrade done", 0, tester.buildSystem().jobs().size());
+ assertEquals("Upgrade done", 0, tester.deploymentQueue().jobs().size());
deployer.maintain();
- List<BuildService.BuildJob> jobs = tester.buildSystem().jobs();
+ List<BuildService.BuildJob> jobs = tester.deploymentQueue().jobs();
assertEquals(1, jobs.size());
assertEquals(11, jobs.get(0).projectId());
assertEquals(DeploymentJobs.JobType.systemTest.jobName(), jobs.get(0).jobName());
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/UpgraderTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/UpgraderTest.java
index 90721e7be6b..e3636974e9a 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/UpgraderTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/UpgraderTest.java
@@ -38,7 +38,7 @@ public class UpgraderTest {
tester.updateVersionStatus(version);
tester.upgrader().maintain();
- assertEquals("No applications: Nothing to do", 0, tester.buildSystem().jobs().size());
+ assertEquals("No applications: Nothing to do", 0, tester.deploymentQueue().jobs().size());
// Setup applications
Application canary0 = tester.createAndDeploy("canary0", 1, "canary");
@@ -49,7 +49,7 @@ public class UpgraderTest {
Application conservative0 = tester.createAndDeploy("conservative0", 6, "conservative");
tester.upgrader().maintain();
- assertEquals("All already on the right version: Nothing to do", 0, tester.buildSystem().jobs().size());
+ assertEquals("All already on the right version: Nothing to do", 0, tester.deploymentQueue().jobs().size());
// --- 5.1 is released - everything goes smoothly
version = Version.fromString("5.1");
@@ -57,20 +57,20 @@ public class UpgraderTest {
assertEquals(version, tester.controller().versionStatus().systemVersion().get().versionNumber());
tester.upgrader().maintain();
- assertEquals("New system version: Should upgrade Canaries", 2, tester.buildSystem().jobs().size());
+ assertEquals("New system version: Should upgrade Canaries", 2, tester.deploymentQueue().jobs().size());
tester.completeUpgrade(canary0, version, "canary");
assertEquals(version, tester.configServer().lastPrepareVersion().get());
tester.updateVersionStatus(version);
tester.upgrader().maintain();
- assertEquals("One canary pending; nothing else", 1, tester.buildSystem().jobs().size());
+ assertEquals("One canary pending; nothing else", 1, tester.deploymentQueue().jobs().size());
tester.completeUpgrade(canary1, version, "canary");
tester.updateVersionStatus(version);
assertEquals(VespaVersion.Confidence.normal, tester.controller().versionStatus().systemVersion().get().confidence());
tester.upgrader().maintain();
- assertEquals("Canaries done: Should upgrade defaults", 3, tester.buildSystem().jobs().size());
+ assertEquals("Canaries done: Should upgrade defaults", 3, tester.deploymentQueue().jobs().size());
tester.completeUpgrade(default0, version, "default");
tester.completeUpgrade(default1, version, "default");
@@ -79,12 +79,12 @@ public class UpgraderTest {
tester.updateVersionStatus(version);
assertEquals(VespaVersion.Confidence.high, tester.controller().versionStatus().systemVersion().get().confidence());
tester.upgrader().maintain();
- assertEquals("Normals done: Should upgrade conservatives", 1, tester.buildSystem().jobs().size());
+ assertEquals("Normals done: Should upgrade conservatives", 1, tester.deploymentQueue().jobs().size());
tester.completeUpgrade(conservative0, version, "conservative");
tester.updateVersionStatus(version);
tester.upgrader().maintain();
- assertEquals("Nothing to do", 0, tester.buildSystem().jobs().size());
+ assertEquals("Nothing to do", 0, tester.deploymentQueue().jobs().size());
// --- 5.2 is released - which fails a Canary
version = Version.fromString("5.2");
@@ -92,9 +92,9 @@ public class UpgraderTest {
assertEquals(version, tester.controller().versionStatus().systemVersion().get().versionNumber());
tester.upgrader().maintain();
- assertEquals("New system version: Should upgrade Canaries", 2, tester.buildSystem().jobs().size());
+ assertEquals("New system version: Should upgrade Canaries", 2, tester.deploymentQueue().jobs().size());
tester.completeUpgradeWithError(canary0, version, "canary", DeploymentJobs.JobType.stagingTest);
- assertEquals("Other Canary was cancelled", 2, tester.buildSystem().jobs().size());
+ assertEquals("Other Canary was cancelled", 2, tester.deploymentQueue().jobs().size());
// TODO: Cancelled would mean it was triggerd, removed from the build system, but never reported in.
// Thus, the expected number of jobs should be 1, above: the retrying canary0.
// Further, canary1 should be retried after the timeout period of 12 hours, but verifying this is
@@ -103,7 +103,7 @@ public class UpgraderTest {
tester.updateVersionStatus(version);
assertEquals(VespaVersion.Confidence.broken, tester.controller().versionStatus().systemVersion().get().confidence());
tester.upgrader().maintain();
- assertEquals("Version broken, but Canaries should keep trying", 2, tester.buildSystem().jobs().size());
+ assertEquals("Version broken, but Canaries should keep trying", 2, tester.deploymentQueue().jobs().size());
// Exhaust canary retries.
tester.notifyJobCompletion(DeploymentJobs.JobType.systemTest, canary1, false);
@@ -118,13 +118,13 @@ public class UpgraderTest {
assertEquals(version, tester.controller().versionStatus().systemVersion().get().versionNumber());
tester.upgrader().maintain();
- assertEquals("New system version: Should upgrade Canaries", 2, tester.buildSystem().jobs().size());
+ assertEquals("New system version: Should upgrade Canaries", 2, tester.deploymentQueue().jobs().size());
tester.completeUpgrade(canary0, version, "canary");
assertEquals(version, tester.configServer().lastPrepareVersion().get());
tester.updateVersionStatus(version);
tester.upgrader().maintain();
- assertEquals("One canary pending; nothing else", 1, tester.buildSystem().jobs().size());
+ assertEquals("One canary pending; nothing else", 1, tester.deploymentQueue().jobs().size());
tester.completeUpgrade(canary1, version, "canary");
@@ -132,7 +132,7 @@ public class UpgraderTest {
assertEquals(VespaVersion.Confidence.normal, tester.controller().versionStatus().systemVersion().get().confidence());
tester.upgrader().maintain();
- assertEquals("Canaries done: Should upgrade defaults", 3, tester.buildSystem().jobs().size());
+ assertEquals("Canaries done: Should upgrade defaults", 3, tester.deploymentQueue().jobs().size());
tester.completeUpgradeWithError(default0, version, "default", DeploymentJobs.JobType.stagingTest);
tester.completeUpgrade(default1, version, "default");
@@ -142,7 +142,7 @@ public class UpgraderTest {
assertEquals("Not enough evidence to mark this as neither broken nor high",
VespaVersion.Confidence.normal, tester.controller().versionStatus().systemVersion().get().confidence());
- assertEquals("Upgrade with error should retry", 1, tester.buildSystem().jobs().size());
+ assertEquals("Upgrade with error should retry", 1, tester.deploymentQueue().jobs().size());
// Finish previous run, with exhausted retry.
tester.clock().advance(Duration.ofHours(1));
@@ -155,12 +155,12 @@ public class UpgraderTest {
tester.updateVersionStatus(version);
assertEquals(VespaVersion.Confidence.high, tester.controller().versionStatus().systemVersion().get().confidence());
tester.upgrader().maintain();
- assertEquals("Normals done: Should upgrade conservatives", 1, tester.buildSystem().jobs().size());
+ assertEquals("Normals done: Should upgrade conservatives", 1, tester.deploymentQueue().jobs().size());
tester.completeUpgrade(conservative0, version, "conservative");
tester.updateVersionStatus(version);
tester.upgrader().maintain();
- assertEquals("Applications are on 5.3 - nothing to do", 0, tester.buildSystem().jobs().size());
+ assertEquals("Applications are on 5.3 - nothing to do", 0, tester.deploymentQueue().jobs().size());
// --- Starting upgrading to a new version which breaks, causing upgrades to commence on the previous version
Version version54 = Version.fromString("5.4");
@@ -173,7 +173,7 @@ public class UpgraderTest {
tester.updateVersionStatus(version54);
assertEquals(VespaVersion.Confidence.normal, tester.controller().versionStatus().systemVersion().get().confidence());
tester.upgrader().maintain();
- assertEquals("Upgrade of defaults are scheduled", 5, tester.buildSystem().jobs().size());
+ assertEquals("Upgrade of defaults are scheduled", 5, tester.deploymentQueue().jobs().size());
assertEquals(version54, ((Change.VersionChange)tester.application(default0.id()).deploying().get()).version());
assertEquals(version54, ((Change.VersionChange)tester.application(default1.id()).deploying().get()).version());
assertEquals(version54, ((Change.VersionChange)tester.application(default2.id()).deploying().get()).version());
@@ -189,7 +189,7 @@ public class UpgraderTest {
tester.updateVersionStatus(version55);
assertEquals(VespaVersion.Confidence.normal, tester.controller().versionStatus().systemVersion().get().confidence());
tester.upgrader().maintain();
- assertEquals("Upgrade of defaults are scheduled", 5, tester.buildSystem().jobs().size());
+ assertEquals("Upgrade of defaults are scheduled", 5, tester.deploymentQueue().jobs().size());
assertEquals(version55, ((Change.VersionChange)tester.application(default0.id()).deploying().get()).version());
assertEquals(version54, ((Change.VersionChange)tester.application(default1.id()).deploying().get()).version());
assertEquals(version54, ((Change.VersionChange)tester.application(default2.id()).deploying().get()).version());
@@ -215,7 +215,7 @@ public class UpgraderTest {
tester.upgrader().maintain();
assertEquals("Upgrade of defaults are scheduled on 5.4 instead, since 5.5 broken: " +
"This is default3 since it failed upgrade on both 5.4 and 5.5",
- 1, tester.buildSystem().jobs().size());
+ 1, tester.deploymentQueue().jobs().size());
assertEquals("5.4", ((Change.VersionChange)tester.application(default3.id()).deploying().get()).version().toString());
}
@@ -224,13 +224,13 @@ public class UpgraderTest {
// --- Setup
DeploymentTester tester = new DeploymentTester();
tester.upgrader().maintain();
- assertEquals("No system version: Nothing to do", 0, tester.buildSystem().jobs().size());
+ assertEquals("No system version: Nothing to do", 0, tester.deploymentQueue().jobs().size());
Version version = Version.fromString("5.0"); // (lower than the hardcoded version in the config server client)
tester.updateVersionStatus(version);
tester.upgrader().maintain();
- assertEquals("No applications: Nothing to do", 0, tester.buildSystem().jobs().size());
+ assertEquals("No applications: Nothing to do", 0, tester.deploymentQueue().jobs().size());
// Setup applications
Application canary0 = tester.createAndDeploy("canary0", 1, "canary");
@@ -247,7 +247,7 @@ public class UpgraderTest {
Application default9 = tester.createAndDeploy("default9", 12, "default");
tester.upgrader().maintain();
- assertEquals("All already on the right version: Nothing to do", 0, tester.buildSystem().jobs().size());
+ assertEquals("All already on the right version: Nothing to do", 0, tester.deploymentQueue().jobs().size());
// --- A new version is released
version = Version.fromString("5.1");
@@ -255,20 +255,20 @@ public class UpgraderTest {
assertEquals(version, tester.controller().versionStatus().systemVersion().get().versionNumber());
tester.upgrader().maintain();
- assertEquals("New system version: Should upgrade Canaries", 2, tester.buildSystem().jobs().size());
+ assertEquals("New system version: Should upgrade Canaries", 2, tester.deploymentQueue().jobs().size());
tester.completeUpgrade(canary0, version, "canary");
assertEquals(version, tester.configServer().lastPrepareVersion().get());
tester.updateVersionStatus(version);
tester.upgrader().maintain();
- assertEquals("One canary pending; nothing else", 1, tester.buildSystem().jobs().size());
+ assertEquals("One canary pending; nothing else", 1, tester.deploymentQueue().jobs().size());
tester.completeUpgrade(canary1, version, "canary");
tester.updateVersionStatus(version);
assertEquals(VespaVersion.Confidence.normal, tester.controller().versionStatus().systemVersion().get().confidence());
tester.upgrader().maintain();
- assertEquals("Canaries done: Should upgrade defaults", 10, tester.buildSystem().jobs().size());
+ assertEquals("Canaries done: Should upgrade defaults", 10, tester.deploymentQueue().jobs().size());
tester.completeUpgrade(default0, version, "default");
tester.completeUpgradeWithError(default1, version, "default", DeploymentJobs.JobType.systemTest);
@@ -280,7 +280,7 @@ public class UpgraderTest {
tester.updateVersionStatus(version);
tester.upgrader().maintain();
assertEquals(VespaVersion.Confidence.broken, tester.controller().versionStatus().systemVersion().get().confidence());
- assertEquals("Upgrades are cancelled", 0, tester.buildSystem().jobs().size());
+ assertEquals("Upgrades are cancelled", 0, tester.deploymentQueue().jobs().size());
}
@Test
@@ -302,7 +302,7 @@ public class UpgraderTest {
tester.upgrader().maintain();
assertEquals("Application is on expected version: Nothing to do", 0,
- tester.buildSystem().jobs().size());
+ tester.deploymentQueue().jobs().size());
// New version is released
version = Version.fromString("5.1");
@@ -315,10 +315,10 @@ public class UpgraderTest {
// staging-test fails multiple times, exhausts retries and failure is recorded
tester.deployAndNotify(app, applicationPackage, false, DeploymentJobs.JobType.stagingTest);
- tester.buildSystem().takeJobsToRun();
+ tester.deploymentQueue().takeJobsToRun();
tester.clock().advance(Duration.ofMinutes(10));
tester.notifyJobCompletion(DeploymentJobs.JobType.stagingTest, app, false);
- assertTrue("Retries exhausted", tester.buildSystem().jobs().isEmpty());
+ assertTrue("Retries exhausted", tester.deploymentQueue().jobs().isEmpty());
assertTrue("Failure is recorded", tester.application(app.id()).deploymentJobs().hasFailures());
assertTrue("Application has pending change", tester.application(app.id()).deploying().isPresent());
@@ -330,12 +330,12 @@ public class UpgraderTest {
// Upgrade is scheduled. system-tests starts, but does not complete
tester.upgrader().maintain();
assertTrue("Application still has failures", tester.application(app.id()).deploymentJobs().hasFailures());
- assertEquals(1, tester.buildSystem().jobs().size());
- tester.buildSystem().takeJobsToRun();
+ assertEquals(1, tester.deploymentQueue().jobs().size());
+ tester.deploymentQueue().takeJobsToRun();
// Upgrader runs again, nothing happens as there's already a job in progress for this change
tester.upgrader().maintain();
- assertTrue("No more jobs triggered at this time", tester.buildSystem().jobs().isEmpty());
+ assertTrue("No more jobs triggered at this time", tester.deploymentQueue().jobs().isEmpty());
}
@Test
@@ -367,7 +367,7 @@ public class UpgraderTest {
// Applications with default policy start upgrading
tester.upgrader().maintain();
- assertEquals("Upgrade scheduled for remaining apps", 5, tester.buildSystem().jobs().size());
+ assertEquals("Upgrade scheduled for remaining apps", 5, tester.deploymentQueue().jobs().size());
// 4/5 applications fail and lowers confidence
tester.completeUpgradeWithError(default0, version, "default", DeploymentJobs.JobType.systemTest);
@@ -381,7 +381,7 @@ public class UpgraderTest {
// 5th app passes system-test, but does not trigger next job as upgrade is cancelled
assertFalse("No change present", tester.applications().require(default4.id()).deploying().isPresent());
tester.notifyJobCompletion(DeploymentJobs.JobType.systemTest, default4, true);
- assertTrue("All jobs consumed", tester.buildSystem().jobs().isEmpty());
+ assertTrue("All jobs consumed", tester.deploymentQueue().jobs().isEmpty());
}
@Test
@@ -455,19 +455,19 @@ public class UpgraderTest {
// Application is not upgraded at this time
tester.upgrader().maintain();
- assertTrue("No jobs scheduled", tester.buildSystem().jobs().isEmpty());
+ assertTrue("No jobs scheduled", tester.deploymentQueue().jobs().isEmpty());
// One hour passes, time is 19:00, still no upgrade
tester.clock().advance(Duration.ofHours(1));
tester.upgrader().maintain();
- assertTrue("No jobs scheduled", tester.buildSystem().jobs().isEmpty());
+ assertTrue("No jobs scheduled", tester.deploymentQueue().jobs().isEmpty());
// Two hours pass in total, time is 20:00 and application upgrades
tester.clock().advance(Duration.ofHours(1));
tester.upgrader().maintain();
- assertFalse("Job is scheduled", tester.buildSystem().jobs().isEmpty());
+ assertFalse("Job is scheduled", tester.deploymentQueue().jobs().isEmpty());
tester.completeUpgrade(app, version, "canary");
- assertTrue("All jobs consumed", tester.buildSystem().jobs().isEmpty());
+ assertTrue("All jobs consumed", tester.deploymentQueue().jobs().isEmpty());
}
@Test
@@ -502,19 +502,19 @@ public class UpgraderTest {
tester.deployAndNotify(app, applicationPackage, true, DeploymentJobs.JobType.stagingTest);
clock.advance(Duration.ofHours(1)); // Entering block window after prod job is triggered
tester.deployAndNotify(app, applicationPackage, true, DeploymentJobs.JobType.productionUsWest1);
- assertTrue(tester.buildSystem().jobs().isEmpty()); // Next job not triggered due to being in the block window
+ assertTrue(tester.deploymentQueue().jobs().isEmpty()); // Next job not triggered due to being in the block window
// One hour passes, time is 19:00, still no upgrade
tester.clock().advance(Duration.ofHours(1));
readyJobsTrigger.maintain();
- assertTrue("No jobs scheduled", tester.buildSystem().jobs().isEmpty());
+ assertTrue("No jobs scheduled", tester.deploymentQueue().jobs().isEmpty());
// Another hour pass, time is 20:00 and application upgrades
tester.clock().advance(Duration.ofHours(1));
readyJobsTrigger.maintain();
tester.deployAndNotify(app, applicationPackage, true, DeploymentJobs.JobType.productionUsCentral1);
tester.deployAndNotify(app, applicationPackage, true, DeploymentJobs.JobType.productionUsEast3);
- assertTrue("All jobs consumed", tester.buildSystem().jobs().isEmpty());
+ assertTrue("All jobs consumed", tester.deploymentQueue().jobs().isEmpty());
}
/**
@@ -558,7 +558,7 @@ public class UpgraderTest {
tester.deployAndNotify(app, applicationPackage, true, DeploymentJobs.JobType.productionUsWest1);
clock.advance(Duration.ofHours(1)); // Entering block window after prod job is triggered
tester.deployAndNotify(app, applicationPackage, true, DeploymentJobs.JobType.productionUsCentral1);
- assertTrue(tester.buildSystem().jobs().isEmpty()); // Next job not triggered due to being in the block window
+ assertTrue(tester.deploymentQueue().jobs().isEmpty()); // Next job not triggered due to being in the block window
// A day passes and we get a new version
tester.clock().advance(Duration.ofDays(1));
@@ -566,7 +566,7 @@ public class UpgraderTest {
tester.updateVersionStatus(version);
tester.upgrader().maintain();
readyJobsTrigger.maintain();
- assertTrue("Nothing is scheduled", tester.buildSystem().jobs().isEmpty());
+ assertTrue("Nothing is scheduled", tester.deploymentQueue().jobs().isEmpty());
// Monday morning: We are not blocked
tester.clock().advance(Duration.ofDays(1)); // Sunday, 17:00
@@ -580,7 +580,7 @@ public class UpgraderTest {
tester.deployAndNotify(app, applicationPackage, true, DeploymentJobs.JobType.productionUsWest1);
tester.deployAndNotify(app, applicationPackage, true, DeploymentJobs.JobType.productionUsCentral1);
tester.deployAndNotify(app, applicationPackage, true, DeploymentJobs.JobType.productionUsEast3);
- assertTrue("All jobs consumed", tester.buildSystem().jobs().isEmpty());
+ assertTrue("All jobs consumed", tester.deploymentQueue().jobs().isEmpty());
// App is completely upgraded to the latest version
for (Deployment deployment : tester.applications().require(app.id()).deployments().values())
@@ -624,7 +624,7 @@ public class UpgraderTest {
// Applications with default policy start upgrading
tester.clock().advance(Duration.ofMinutes(1));
tester.upgrader().maintain();
- assertEquals("Upgrade scheduled for remaining apps", 5, tester.buildSystem().jobs().size());
+ assertEquals("Upgrade scheduled for remaining apps", 5, tester.deploymentQueue().jobs().size());
// 4/5 applications fail, confidence is lowered and upgrade is cancelled
tester.completeUpgradeWithError(default0, version, "default", DeploymentJobs.JobType.systemTest);
@@ -658,7 +658,7 @@ public class UpgraderTest {
assertEquals(VespaVersion.Confidence.normal, tester.controller().versionStatus().systemVersion().get().confidence());
tester.upgrader().maintain();
- assertEquals("Upgrade scheduled for previously failing apps", 4, tester.buildSystem().jobs().size());
+ assertEquals("Upgrade scheduled for previously failing apps", 4, tester.deploymentQueue().jobs().size());
tester.completeUpgrade(default0, version, "default");
tester.completeUpgrade(default1, version, "default");
tester.completeUpgrade(default2, version, "default");
@@ -700,24 +700,24 @@ public class UpgraderTest {
assertEquals(version, tester.controller().versionStatus().systemVersion().get().versionNumber());
upgrader.maintain();
- assertEquals(2, tester.buildSystem().jobs().size());
+ assertEquals(2, tester.deploymentQueue().jobs().size());
tester.completeUpgrade(canary0, version, "canary");
tester.completeUpgrade(canary1, version, "canary");
tester.updateVersionStatus(version);
// Next run upgrades a subset
upgrader.maintain();
- assertEquals(2, tester.buildSystem().jobs().size());
+ assertEquals(2, tester.deploymentQueue().jobs().size());
tester.completeUpgrade(default0, version, "default");
tester.completeUpgrade(default2, version, "default");
// Remaining applications upgraded
upgrader.maintain();
- assertEquals(2, tester.buildSystem().jobs().size());
+ assertEquals(2, tester.deploymentQueue().jobs().size());
tester.completeUpgrade(default1, version, "default");
tester.completeUpgrade(default3, version, "default");
upgrader.maintain();
- assertTrue("All jobs consumed", tester.buildSystem().jobs().isEmpty());
+ assertTrue("All jobs consumed", tester.deploymentQueue().jobs().isEmpty());
}
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ControllerContainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ControllerContainerTest.java
index 631ceab98a5..e8cb254b9fa 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ControllerContainerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ControllerContainerTest.java
@@ -59,6 +59,7 @@ public class ControllerContainerTest {
" <component id='com.yahoo.vespa.hosted.controller.ConfigServerClientMock'/>\n" +
" <component id='com.yahoo.vespa.hosted.controller.ZoneRegistryMock'/>\n" +
" <component id='com.yahoo.vespa.hosted.controller.Controller'/>\n" +
+ " <component id='com.yahoo.vespa.hosted.controller.deployment.MockBuildService'/>\n" +
" <component id='com.yahoo.vespa.hosted.controller.ConfigServerProxyMock'/>\n" +
" <component id='com.yahoo.vespa.hosted.controller.integration.MockMetricsService'/>\n" +
" <component id='com.yahoo.vespa.hosted.controller.maintenance.ControllerMaintenance'/>\n" +
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/controller/responses/maintenance.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/controller/responses/maintenance.json
index 8f8b76c83c6..baafca7cf34 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/controller/responses/maintenance.json
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/controller/responses/maintenance.json
@@ -19,6 +19,9 @@
"name": "DeploymentMetricsMaintainer"
},
{
+ "name": "DeploymentTriggerer"
+ },
+ {
"name": "DnsMaintainer"
},
{
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/screwdriver/ScrewdriverApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/screwdriver/ScrewdriverApiTest.java
index 7adc593278a..7a9973f2742 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/screwdriver/ScrewdriverApiTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/screwdriver/ScrewdriverApiTest.java
@@ -15,6 +15,7 @@ import com.yahoo.vespa.hosted.controller.application.DeploymentJobs.JobError;
import com.yahoo.vespa.hosted.controller.application.DeploymentJobs.JobType;
import com.yahoo.vespa.hosted.controller.application.JobStatus;
import com.yahoo.vespa.hosted.controller.deployment.ApplicationPackageBuilder;
+import com.yahoo.vespa.hosted.controller.deployment.DeploymentQueue;
import com.yahoo.vespa.hosted.controller.restapi.ContainerControllerTester;
import com.yahoo.vespa.hosted.controller.restapi.ControllerContainerTest;
import com.yahoo.vespa.hosted.controller.versions.VersionStatus;
@@ -142,7 +143,7 @@ public class ScrewdriverApiTest extends ControllerContainerTest {
@Test
public void testTriggerJobForApplication() throws Exception {
ContainerControllerTester tester = new ContainerControllerTester(container, responseFiles);
- BuildSystem buildSystem = tester.controller().applications().deploymentTrigger().buildSystem();
+ DeploymentQueue deploymentQueue = tester.controller().applications().deploymentTrigger().deploymentQueue();
tester.containerTester().updateSystemVersion();
Application app = tester.createApplication();
@@ -166,19 +167,19 @@ public class ScrewdriverApiTest extends ControllerContainerTest {
new byte[0], Request.Method.POST),
200, "{\"message\":\"Triggered component for tenant1.application1\"}");
- assertFalse(buildSystem.jobs().isEmpty());
- assertEquals(JobType.component.jobName(), buildSystem.jobs().get(0).jobName());
- assertEquals(1L, buildSystem.jobs().get(0).projectId());
- buildSystem.takeJobsToRun();
+ assertFalse(deploymentQueue.jobs().isEmpty());
+ assertEquals(JobType.component.jobName(), deploymentQueue.jobs().get(0).jobName());
+ assertEquals(1L, deploymentQueue.jobs().get(0).projectId());
+ deploymentQueue.takeJobsToRun();
// Triggers specific job when given
assertResponse(new Request("http://localhost:8080/screwdriver/v1/trigger/tenant/" +
app.id().tenant().value() + "/application/" + app.id().application().value(),
"staging-test".getBytes(StandardCharsets.UTF_8), Request.Method.POST),
200, "{\"message\":\"Triggered staging-test for tenant1.application1\"}");
- assertFalse(buildSystem.jobs().isEmpty());
- assertEquals(JobType.stagingTest.jobName(), buildSystem.jobs().get(0).jobName());
- assertEquals(1L, buildSystem.jobs().get(0).projectId());
+ assertFalse(deploymentQueue.jobs().isEmpty());
+ assertEquals(JobType.stagingTest.jobName(), deploymentQueue.jobs().get(0).jobName());
+ assertEquals(1L, deploymentQueue.jobs().get(0).projectId());
}
private void notifyCompletion(ApplicationId app, long projectId, JobType jobType, Optional<JobError> error) throws IOException {