aboutsummaryrefslogtreecommitdiffstats
path: root/controller-server/src
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2017-09-04 11:19:30 +0200
committerMartin Polden <mpolden@mpolden.no>2017-09-22 09:29:11 +0200
commit5238ca484594f4c0cf20305149bf99b64c37a1fa (patch)
tree8cc00888506ccb6a465a0b33a57df922bb8c0425 /controller-server/src
parentb77d42c9a25531982d2d77af32561850cf56ab36 (diff)
Remove self-triggering support
Diffstat (limited to 'controller-server/src')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java6
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/DeploymentJobs.java31
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTrigger.java5
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java3
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/screwdriver/ScrewdriverApiHandler.java3
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java74
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java13
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTester.java3
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/MockBuildService.java3
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/PolledBuildSystemTest.java20
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentExpirerTest.java52
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializerTest.java3
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerControllerTester.java4
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/versions/VersionStatusTest.java3
14 files changed, 81 insertions, 142 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java
index ccfcc0e4b0d..c04e68b7a50 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java
@@ -278,17 +278,13 @@ public class ApplicationController {
Version version;
if (options.deployCurrentVersion)
version = application.currentVersion(controller, zone);
- else if (application.deploymentJobs().isSelfTriggering()) // legacy mode: let the client decide
- version = options.vespaVersion.map(Version::new).orElse(controller.systemVersion());
else if ( ! application.deploying().isPresent() && ! zone.environment().isManuallyDeployed())
return unexpectedDeployment(applicationId, zone, applicationPackage);
else
version = application.currentDeployVersion(controller, zone);
// Ensure that the deploying change is tested
- // FIXME: For now only for non-self-triggering applications - VESPA-8418
- if ( ! application.deploymentJobs().isSelfTriggering() &&
- ! zone.environment().isManuallyDeployed() &&
+ if ( ! zone.environment().isManuallyDeployed() &&
! application.deploymentJobs().isDeployableTo(zone.environment(), application.deploying()))
throw new IllegalArgumentException("Rejecting deployment of " + application + " to " + zone +
" as pending " + application.deploying().get() +
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/DeploymentJobs.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/DeploymentJobs.java
index b4ca00243b7..722e8d10f40 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/DeploymentJobs.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/DeploymentJobs.java
@@ -31,25 +31,23 @@ public class DeploymentJobs {
private final Optional<Long> projectId;
private final ImmutableMap<JobType, JobStatus> status;
private final Optional<String> jiraIssueId;
- private final boolean selfTriggering; // TODO: Remove this when no projects are self-triggering.
/** Creates an empty set of deployment jobs */
public DeploymentJobs(long projectId) {
- this(Optional.of(projectId), ImmutableMap.of(), Optional.empty(),true);
+ this(Optional.of(projectId), ImmutableMap.of(), Optional.empty());
}
- public DeploymentJobs(Optional<Long> projectId, Collection<JobStatus> jobStatusEntries, Optional<String> jiraIssueId, boolean selfTriggering) {
- this(projectId, asMap(jobStatusEntries), jiraIssueId, selfTriggering);
+ public DeploymentJobs(Optional<Long> projectId, Collection<JobStatus> jobStatusEntries, Optional<String> jiraIssueId) {
+ this(projectId, asMap(jobStatusEntries), jiraIssueId);
}
- private DeploymentJobs(Optional<Long> projectId, Map<JobType, JobStatus> status, Optional<String> jiraIssueId, boolean selfTriggering) {
+ private DeploymentJobs(Optional<Long> projectId, Map<JobType, JobStatus> status, Optional<String> jiraIssueId) {
Objects.requireNonNull(projectId, "projectId cannot be null");
Objects.requireNonNull(status, "status cannot be null");
Objects.requireNonNull(jiraIssueId, "jiraIssueId cannot be null");
this.projectId = projectId;
this.status = ImmutableMap.copyOf(status);
this.jiraIssueId = jiraIssueId;
- this.selfTriggering = selfTriggering;
}
private static Map<JobType, JobStatus> asMap(Collection<JobStatus> jobStatusEntries) {
@@ -66,7 +64,7 @@ public class DeploymentJobs {
if (job == null) job = JobStatus.initial(report.jobType());
return job.withCompletion(report.jobError(), notificationTime, controller);
});
- return new DeploymentJobs(Optional.of(report.projectId()), status, jiraIssueId, report.selfTriggering());
+ return new DeploymentJobs(Optional.of(report.projectId()), status, jiraIssueId);
}
public DeploymentJobs withTriggering(JobType jobType,
@@ -81,33 +79,30 @@ public class DeploymentJobs {
change.isPresent() && change.get() instanceof Change.VersionChange,
triggerTime);
});
- return new DeploymentJobs(projectId, status, jiraIssueId, selfTriggering);
+ return new DeploymentJobs(projectId, status, jiraIssueId);
}
public DeploymentJobs withProjectId(long projectId) {
- return new DeploymentJobs(Optional.of(projectId), status, jiraIssueId, selfTriggering);
+ return new DeploymentJobs(Optional.of(projectId), status, jiraIssueId);
}
public DeploymentJobs withJiraIssueId(Optional<String> jiraIssueId) {
- return new DeploymentJobs(projectId, status, jiraIssueId, selfTriggering);
+ return new DeploymentJobs(projectId, status, jiraIssueId);
}
public DeploymentJobs without(JobType job) {
Map<JobType, JobStatus> status = new HashMap<>(this.status);
status.remove(job);
- return new DeploymentJobs(projectId, status, jiraIssueId, selfTriggering);
+ return new DeploymentJobs(projectId, status, jiraIssueId);
}
public DeploymentJobs asSelfTriggering(boolean selfTriggering) {
- return new DeploymentJobs(projectId, status, jiraIssueId, selfTriggering);
+ return new DeploymentJobs(projectId, status, jiraIssueId);
}
/** Returns an immutable map of the status entries in this */
public Map<JobType, JobStatus> jobStatus() { return status; }
- /** Returns whether this application's deployment jobs trigger each other, and should be left alone, or not. */
- public boolean isSelfTriggering() { return selfTriggering; }
-
/** Returns whether this has some job status which is not a success */
public boolean hasFailures() {
return status.values().stream().anyMatch(jobStatus -> ! jobStatus.isSuccess());
@@ -281,19 +276,18 @@ public class DeploymentJobs {
private final long projectId;
private final long buildNumber;
private final Optional<JobError> jobError;
- private final boolean selfTriggering;
public JobReport(ApplicationId applicationId, JobType jobType, long projectId, long buildNumber,
- Optional<JobError> jobError, boolean selfTriggering) {
+ Optional<JobError> jobError) {
Objects.requireNonNull(applicationId, "applicationId cannot be null");
Objects.requireNonNull(jobType, "jobType cannot be null");
Objects.requireNonNull(jobError, "jobError cannot be null");
+
this.applicationId = applicationId;
this.projectId = projectId;
this.buildNumber = buildNumber;
this.jobType = jobType;
this.jobError = jobError;
- this.selfTriggering = selfTriggering;
}
public ApplicationId applicationId() { return applicationId; }
@@ -302,7 +296,6 @@ public class DeploymentJobs {
public long buildNumber() { return buildNumber; }
public boolean success() { return !jobError.isPresent(); }
public Optional<JobError> jobError() { return jobError; }
- public boolean selfTriggering() { return selfTriggering; }
}
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 d2af5fc50cb..c0e73a44444 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
@@ -280,11 +280,6 @@ public class DeploymentTrigger {
return application;
}
- if (application.deploymentJobs().isSelfTriggering()) {
- log.info("Not triggering " + jobType + " for self-triggering " + application);
- return application;
- }
-
log.info(String.format("Triggering %s for %s, %s: %s", jobType, application,
application.deploying().map(d -> "deploying " + d).orElse("restarted deployment"),
cause));
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java
index 607ad4fd9f0..36363dd052e 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java
@@ -125,7 +125,6 @@ public class ApplicationSerializer {
deploymentJobs.projectId().ifPresent(projectId -> cursor.setLong(projectIdField, projectId));
jobStatusToSlime(deploymentJobs.jobStatus().values(), cursor.setArray(jobStatusField));
deploymentJobs.jiraIssueId().ifPresent(jiraIssueId -> cursor.setString(jiraIssueIdField, jiraIssueId));
- cursor.setBool(selfTriggeringField, deploymentJobs.isSelfTriggering());
}
private void jobStatusToSlime(Collection<JobStatus> jobStatuses, Cursor jobStatusArray) {
@@ -220,7 +219,7 @@ public class ApplicationSerializer {
Optional<String> jiraIssueKey = optionalString(object.field(jiraIssueIdField));
boolean selfTriggering = object.field(selfTriggeringField).asBool();
- return new DeploymentJobs(projectId, jobStatusList, jiraIssueKey, selfTriggering);
+ return new DeploymentJobs(projectId, jobStatusList, jiraIssueKey);
}
private Optional<Change> changeFromSlime(Inspector object) {
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 3cc4d8c7f5c..c2695554da7 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
@@ -147,8 +147,7 @@ public class ScrewdriverApiHandler extends LoggingRequestHandler {
JobType.fromId(report.field("jobName").asString()),
report.field("projectId").asLong(),
report.field("buildNumber").asLong(),
- jobError,
- report.field("selfTriggering").asBool()
+ jobError
);
}
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 3ab98d31a82..7a6dce9f8fa 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
@@ -101,7 +101,7 @@ public class ControllerTest {
// staging job - succeeding
Version version1 = Version.fromString("6.1"); // Set in config server mock
Application app1 = tester.createApplication("app1", "tenant1", 1, 11L);
- applications.notifyJobCompletion(mockReport(app1, component, true, false));
+ applications.notifyJobCompletion(mockReport(app1, component, true));
assertFalse("Revision is currently not known",
((Change.ApplicationChange)tester.controller().applications().require(app1.id()).deploying().get()).revision().isPresent());
tester.deployAndNotify(app1, applicationPackage, true, systemTest);
@@ -143,7 +143,7 @@ public class ControllerTest {
tester.clock().advance(Duration.ofSeconds(1));
// system and staging test job - succeeding
- applications.notifyJobCompletion(mockReport(app1, component, true, false));
+ applications.notifyJobCompletion(mockReport(app1, component, true));
tester.deployAndNotify(app1, applicationPackage, true, systemTest);
assertStatus(JobStatus.initial(systemTest)
.withTriggering(version1, revision, false, tester.clock().instant())
@@ -170,7 +170,7 @@ public class ControllerTest {
.environment(Environment.prod)
.region("us-east-3")
.build();
- applications.notifyJobCompletion(mockReport(app1, component, true, false));
+ applications.notifyJobCompletion(mockReport(app1, component, true));
try {
tester.deploy(systemTest, app1, applicationPackage);
fail("Expected exception due to unallowed production deployment removal");
@@ -210,7 +210,7 @@ public class ControllerTest {
applications.store(app1.with(app1.deploymentJobs().asSelfTriggering(false)), applications.lock(app1.id()));
// First deployment: An application change
- applications.notifyJobCompletion(mockReport(app1, component, true, false));
+ applications.notifyJobCompletion(mockReport(app1, component, true));
tester.deployAndNotify(app1, applicationPackage, true, systemTest);
tester.deployAndNotify(app1, applicationPackage, true, stagingTest);
tester.deployAndNotify(app1, applicationPackage, true, productionUsWest1);
@@ -233,7 +233,7 @@ public class ControllerTest {
.region("us-west-1")
.region("us-east-3")
.build();
- applications.notifyJobCompletion(mockReport(app1, component, true, false));
+ applications.notifyJobCompletion(mockReport(app1, component, true));
tester.deployAndNotify(app1, applicationPackage, true, systemTest);
tester.deployAndNotify(app1, applicationPackage, true, stagingTest);
tester.deployAndNotify(app1, applicationPackage, true, productionUsWest1);
@@ -404,23 +404,6 @@ public class ControllerTest {
}
@Test
- public void selfTriggeringApplicationIsNotTriggered() {
- ControllerTester tester = new ControllerTester();
- ApplicationController applications = tester.controller().applications();
-
- // Create application and report completion from component job
- long projectId = 1;
- TenantId tenant = tester.createTenant("tenant", "domain", 1L);
- Application application = tester.createApplication(tenant, "application", "default", projectId);
- applications.notifyJobCompletion(mockReport(application, component, true, true));
-
- // Only component completion status is persisted and no further jobs are triggered
- assertEquals(1, applications.get(application.id()).get().deploymentJobs().jobStatus().size());
- assertStatus(JobStatus.initial(component).withCompletion(Optional.empty(), tester.clock().instant(), tester.controller()),
- application.id(), tester.controller());
- }
-
- @Test
public void requeueOutOfCapacityStagingJob() {
DeploymentTester tester = new DeploymentTester();
@@ -491,19 +474,18 @@ public class ControllerTest {
assertEquals(expectedStatus, existingStatus);
}
- private JobReport mockReport(Application application, JobType jobType, Optional<JobError> jobError, boolean selfTriggering) {
+ private JobReport mockReport(Application application, JobType jobType, Optional<JobError> jobError) {
return new JobReport(
application.id(),
jobType,
application.deploymentJobs().projectId().get(),
42,
- jobError,
- selfTriggering
+ jobError
);
}
- private JobReport mockReport(Application application, JobType jobType, boolean success, boolean selfTriggering) {
- return mockReport(application, jobType, JobError.from(success), selfTriggering);
+ private JobReport mockReport(Application application, JobType jobType, boolean success) {
+ return mockReport(application, jobType, JobError.from(success));
}
@Test
@@ -533,44 +515,6 @@ public class ControllerTest {
}
@Test
- public void testLegacyDeployments() {
- // Setup system
- DeploymentTester tester = new DeploymentTester();
- ApplicationController applications = tester.controller().applications();
- ApplicationPackage applicationPackage = new ApplicationPackageBuilder()
- .environment(Environment.prod)
- .region("us-east-3")
- .build();
- Version systemVersion = tester.controller().versionStatus().systemVersion().get().versionNumber();
-
- Application app1 = tester.createApplication("application1", "tenant1", 1, 1L);
- applications.store(app1.with(app1.deploymentJobs().asSelfTriggering(true)), applications.lock(app1.id()));
-
- // Scenario: App already on 6.0, Upgrade to 6.1 (systemversion)
- Zone prodZone = new Zone(Environment.prod, RegionName.from("us-east-3"));
- Zone stagingZone = new Zone(Environment.staging, RegionName.from("us-east-3"));
- Version existingVersion = Version.fromString("6.0");
-
- // Add deployment on existing version
- legacyDeploy(tester.controller(), app1, applicationPackage, prodZone, Optional.of(existingVersion), false);
-
- // Add dev/perf deployment on old version to verify that this does not affect Initialize staging step. VESPA-8469
- Version devVersion = Version.fromString("5.0");
- legacyDeploy(tester.controller(), app1, applicationPackage, new Zone(Environment.dev, RegionName.from("us-east-1")), Optional.of(devVersion), false);
- legacyDeploy(tester.controller(), app1, applicationPackage, new Zone(Environment.perf, RegionName.from("us-east-3")), Optional.of(devVersion), false);
-
- // Initialize staging on existing version
- legacyDeploy(tester.controller(), app1, applicationPackage, stagingZone, Optional.of(systemVersion), true);
- app1 = applications.require(app1.id());
- assertEquals(existingVersion, app1.currentDeployVersion(tester.controller(), stagingZone));
-
- // Upgrade to the new version in staging
- legacyDeploy(tester.controller(), app1, applicationPackage, stagingZone, Optional.of(systemVersion), false);
- app1 = applications.require(app1.id());
- assertEquals(systemVersion, app1.currentDeployVersion(tester.controller(), stagingZone));
- }
-
- @Test
public void testDeployUntestedChangeFails() {
ControllerTester tester = new ControllerTester();
ApplicationController applications = tester.controller().applications();TenantId tenant = tester.createTenant("tenant1", "domain1", 11L);
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java
index 63feb01f1f2..70e370da502 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java
@@ -9,7 +9,6 @@ import com.yahoo.config.provision.RegionName;
import com.yahoo.config.provision.TenantName;
import com.yahoo.config.provision.Zone;
import com.yahoo.test.ManualClock;
-import com.yahoo.vespa.curator.Lock;
import com.yahoo.vespa.hosted.controller.api.Tenant;
import com.yahoo.vespa.hosted.controller.api.application.v4.model.DeployOptions;
import com.yahoo.vespa.hosted.controller.api.application.v4.model.GitRevision;
@@ -22,6 +21,8 @@ import com.yahoo.vespa.hosted.controller.api.identifiers.Property;
import com.yahoo.vespa.hosted.controller.api.identifiers.PropertyId;
import com.yahoo.vespa.hosted.controller.api.identifiers.ScrewdriverId;
import com.yahoo.vespa.hosted.controller.api.identifiers.TenantId;
+import com.yahoo.vespa.hosted.controller.api.integration.athens.mock.AthensDbMock;
+import com.yahoo.vespa.hosted.controller.api.integration.athens.mock.AthensMock;
import com.yahoo.vespa.hosted.controller.api.integration.chef.ChefMock;
import com.yahoo.vespa.hosted.controller.api.integration.dns.MemoryNameService;
import com.yahoo.vespa.hosted.controller.api.integration.entity.MemoryEntityService;
@@ -29,7 +30,6 @@ import com.yahoo.vespa.hosted.controller.api.integration.github.GitHubMock;
import com.yahoo.vespa.hosted.controller.api.integration.jira.JiraMock;
import com.yahoo.vespa.hosted.controller.api.integration.routing.MemoryGlobalRoutingService;
import com.yahoo.vespa.hosted.controller.application.ApplicationPackage;
-import com.yahoo.vespa.hosted.controller.application.Change;
import com.yahoo.vespa.hosted.controller.cost.CostMock;
import com.yahoo.vespa.hosted.controller.cost.MockInsightBackend;
import com.yahoo.vespa.hosted.controller.integration.MockMetricsService;
@@ -40,8 +40,6 @@ import com.yahoo.vespa.hosted.controller.persistence.MockCuratorDb;
import com.yahoo.vespa.hosted.controller.routing.MockRoutingGenerator;
import com.yahoo.vespa.hosted.controller.versions.VersionStatus;
import com.yahoo.vespa.hosted.rotation.MemoryRotationRepository;
-import com.yahoo.vespa.hosted.controller.api.integration.athens.mock.AthensMock;
-import com.yahoo.vespa.hosted.controller.api.integration.athens.mock.AthensDbMock;
import java.util.Optional;
@@ -109,13 +107,6 @@ public final class ControllerTester {
public GitHubMock gitHubClientMock () { return gitHubMock; }
- /** Set the application with the given id to currently be in the progress of rolling out the given change */
- public void setDeploying(ApplicationId id, Optional<Change> change) {
- try (Lock lock = controller.applications().lock(id)) {
- controller.applications().store(controller.applications().require(id).withDeploying(change), lock);
- }
- }
-
/** Creates the given tenant and application and deploys it */
public Application createAndDeploy(String tenantName, String domainName, String applicationName, Environment environment, long projectId, Long propertyId) {
return createAndDeploy(tenantName, domainName, applicationName, toZone(environment), projectId, propertyId);
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 3edbcea9843..dc62de5cb52 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
@@ -194,8 +194,7 @@ public class DeploymentTester {
jobType,
application.deploymentJobs().projectId().get(),
42,
- jobError,
- false
+ 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
index b9e66b354de..0293ea08d65 100644
--- 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
@@ -161,8 +161,7 @@ public class MockBuildService implements BuildService {
jobType,
projectId,
42,
- JobError.from(success),
- false
+ JobError.from(success)
));
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/PolledBuildSystemTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/PolledBuildSystemTest.java
index 779af370ff4..c869bd90924 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/PolledBuildSystemTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/PolledBuildSystemTest.java
@@ -2,12 +2,9 @@
package com.yahoo.vespa.hosted.controller.deployment;
import com.yahoo.config.provision.ApplicationId;
-import com.yahoo.config.provision.Environment;
-import com.yahoo.vespa.curator.mock.MockCurator;
-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;
-import com.yahoo.vespa.hosted.controller.persistence.CuratorDb;
import com.yahoo.vespa.hosted.controller.persistence.MockCuratorDb;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -37,15 +34,16 @@ public class PolledBuildSystemTest {
@Test
public void throttle_capacity_constrained_jobs() {
- ControllerTester tester = new ControllerTester();
+ DeploymentTester tester = new DeploymentTester();
BuildSystem buildSystem = new PolledBuildSystem(tester.controller(), new MockCuratorDb());
- long fooProjectId = 1;
- long barProjectId = 2;
- ApplicationId foo = tester.createAndDeploy("tenant1", "domain1", "app1",
- Environment.prod, fooProjectId).id();
- ApplicationId bar = tester.createAndDeploy("tenant2", "domain2", "app2",
- Environment.prod, barProjectId).id();
+ int fooProjectId = 1;
+ int barProjectId = 2;
+ ApplicationPackage applicationPackage = new ApplicationPackageBuilder()
+ .region("us-west-1")
+ .build();
+ ApplicationId foo = tester.createAndDeploy("app1", fooProjectId, applicationPackage).id();
+ ApplicationId bar = tester.createAndDeploy("app2", barProjectId, applicationPackage).id();
// Trigger jobs in capacity constrained environment
buildSystem.addJob(foo, jobType, false);
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 4c53a6d37e4..5b758957571 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
@@ -1,16 +1,22 @@
// 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.maintenance;
-import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.Environment;
import com.yahoo.config.provision.RegionName;
import com.yahoo.config.provision.Zone;
-import com.yahoo.vespa.hosted.controller.ControllerTester;
+import com.yahoo.vespa.hosted.controller.Application;
+import com.yahoo.vespa.hosted.controller.application.ApplicationPackage;
+import com.yahoo.vespa.hosted.controller.application.Deployment;
+import com.yahoo.vespa.hosted.controller.deployment.ApplicationPackageBuilder;
+import com.yahoo.vespa.hosted.controller.deployment.DeploymentTester;
import com.yahoo.vespa.hosted.controller.persistence.MockCuratorDb;
+import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.time.Duration;
+import java.util.List;
+import java.util.stream.Collectors;
import static org.junit.Assert.assertEquals;
@@ -19,28 +25,50 @@ import static org.junit.Assert.assertEquals;
*/
public class DeploymentExpirerTest {
+ private DeploymentTester tester;
+
+ @Before
+ public void before() {
+ tester = new DeploymentTester();
+ }
+
@Test
public void testDeploymentExpiry() throws IOException, InterruptedException {
- ControllerTester tester = new ControllerTester();
- tester.getZoneRegistryMock().setDeploymentTimeToLive(new Zone(Environment.dev, RegionName.from("us-east-1")), Duration.ofDays(14));
+ tester.controllerTester().getZoneRegistryMock().setDeploymentTimeToLive(new Zone(Environment.dev, RegionName.from("us-east-1")), Duration.ofDays(14));
DeploymentExpirer expirer = new DeploymentExpirer(tester.controller(), Duration.ofDays(10),
tester.clock(), new JobControl(new MockCuratorDb()));
- ApplicationId devApp = tester.createAndDeploy("tenant1", "domain1", "app1", Environment.dev, 123).id();
- ApplicationId prodApp = tester.createAndDeploy("tenant2", "domain2", "app2", Environment.prod, 456).id();
+ Application devApp = tester.createApplication("app1", "tenant1", 123L, 1L);
+ Application prodApp = tester.createApplication("app2", "tenant2", 456L, 2L);
+
+ // Deploy dev
+ tester.controllerTester().deploy(devApp, tester.controllerTester().toZone(Environment.dev));
- assertEquals(1, tester.controller().applications().get(devApp).get().deployments().size());
- assertEquals(1, tester.controller().applications().get(prodApp).get().deployments().size());
+ // Deploy prod
+ ApplicationPackage prodAppPackage = new ApplicationPackageBuilder()
+ .region("us-west-1")
+ .build();
+ tester.deployCompletely(prodApp, prodAppPackage);
+
+ assertEquals(1, permanentDeployments(devApp).size());
+ assertEquals(1, permanentDeployments(prodApp).size());
// Not expired at first
expirer.maintain();
- assertEquals(1, tester.controller().applications().get(devApp).get().deployments().size());
- assertEquals(1, tester.controller().applications().get(prodApp).get().deployments().size());
+ assertEquals(1, permanentDeployments(devApp).size());
+ assertEquals(1, permanentDeployments(prodApp).size());
// The dev application is removed
tester.clock().advance(Duration.ofDays(15));
expirer.maintain();
- assertEquals(0, tester.controller().applications().get(devApp).get().deployments().size());
- assertEquals(1, tester.controller().applications().get(prodApp).get().deployments().size());
+ assertEquals(0, permanentDeployments(devApp).size());
+ assertEquals(1, permanentDeployments(prodApp).size());
+ }
+
+ private List<Deployment> permanentDeployments(Application application) {
+ return tester.controller().applications().get(application.id()).get().deployments().values().stream()
+ .filter(deployment -> deployment.zone().environment() != Environment.test &&
+ deployment.zone().environment() != Environment.staging)
+ .collect(Collectors.toList());
}
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializerTest.java
index 1aaf41350f2..8babd181d36 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializerTest.java
@@ -67,7 +67,7 @@ public class ApplicationSerializerTest {
.withTriggering(Version.fromString("5.6.6"), Optional.empty(), true, Instant.ofEpochMilli(5))
.withCompletion(Optional.of(JobError.unknown), Instant.ofEpochMilli(6), tester.controller()));
- DeploymentJobs deploymentJobs = new DeploymentJobs(projectId, statusList, Optional.empty(), false);
+ DeploymentJobs deploymentJobs = new DeploymentJobs(projectId, statusList, Optional.empty());
Application original = new Application(ApplicationId.from("t1", "a1", "i1"),
deploymentSpec,
@@ -98,7 +98,6 @@ public class ApplicationSerializerTest {
assertEquals( original.deploymentJobs().jobStatus().get(DeploymentJobs.JobType.stagingTest),
serialized.deploymentJobs().jobStatus().get(DeploymentJobs.JobType.stagingTest));
assertEquals(original.deploymentJobs().failingSince(), serialized.deploymentJobs().failingSince());
- assertEquals(original.deploymentJobs().isSelfTriggering(), serialized.deploymentJobs().isSelfTriggering());
assertEquals(original.hasOutstandingChange(), serialized.hasOutstandingChange());
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerControllerTester.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerControllerTester.java
index ef606a0eced..ed7378ac6b5 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerControllerTester.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerControllerTester.java
@@ -89,8 +89,8 @@ public class ContainerControllerTester {
public void notifyJobCompletion(ApplicationId applicationId, long projectId, boolean success, DeploymentJobs.JobType job) {
controller().applications().notifyJobCompletion(new DeploymentJobs.JobReport(applicationId, job, projectId,
42,
- success ? Optional.empty() : Optional.of(DeploymentJobs.JobError.unknown),
- false));
+ success ? Optional.empty() : Optional.of(DeploymentJobs.JobError.unknown)
+ ));
}
public AthensDomain addTenantAthensDomain(String domainName, String userName) {
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/versions/VersionStatusTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/versions/VersionStatusTest.java
index a2fb5f38457..1de9603bde0 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/versions/VersionStatusTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/versions/VersionStatusTest.java
@@ -274,8 +274,7 @@ public class VersionStatusTest {
jobType,
application.deploymentJobs().projectId().get(),
42,
- JobError.from(success),
- false
+ JobError.from(success)
);
}