summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@verizonmedia.com>2019-06-11 11:20:04 +0200
committerJon Bratseth <bratseth@verizonmedia.com>2019-06-11 11:20:04 +0200
commit727e3484393d794a01b72b1a8e5dc92656236e73 (patch)
treeaf8f63c5368845d762266b068ca775fc9a8716e5
parentb2a957120472ee6b9a6fb22239ad428fed94ec8e (diff)
Support instances
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java2
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTester.java6
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTriggerTest.java41
3 files changed, 46 insertions, 3 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 e0a73d994d1..4e6c45998ec 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
@@ -228,8 +228,6 @@ public class ApplicationController {
* @throws IllegalArgumentException if the application already exists
*/
public Application createApplication(ApplicationId id, Optional<Credentials> credentials) {
- if ( ! (id.instance().isDefault())) // TODO: Support instances properly
- throw new IllegalArgumentException("Only the instance name 'default' is supported at the moment");
if (id.instance().isTester())
throw new IllegalArgumentException("'" + id + "' is a tester application!");
try (Lock lock = lock(id)) {
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 a093aac430b..3ce32347e35 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
@@ -156,8 +156,12 @@ public class DeploymentTester {
}
public Application createApplication(String applicationName, String tenantName, long projectId, long propertyId) {
+ return createApplication("default", applicationName, tenantName, projectId, propertyId);
+ }
+
+ public Application createApplication(String instanceName, String applicationName, String tenantName, long projectId, long propertyId) {
TenantName tenant = tester.createTenant(tenantName, UUID.randomUUID().toString(), propertyId);
- return tester.createApplication(tenant, applicationName, "default", projectId);
+ return tester.createApplication(tenant, applicationName, instanceName, projectId);
}
public void restartController() { tester.createNewController(); }
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 bf7c8cadd3c..0d8d32299ae 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
@@ -3,6 +3,7 @@ package com.yahoo.vespa.hosted.controller.deployment;
import com.yahoo.component.Version;
import com.yahoo.config.provision.Environment;
+import com.yahoo.config.provision.SystemName;
import com.yahoo.config.provision.TenantName;
import com.yahoo.slime.Slime;
import com.yahoo.test.ManualClock;
@@ -109,6 +110,46 @@ public class DeploymentTriggerTest {
}
@Test
+ public void testIndependentInstances() {
+ Application instance1 = tester.createApplication("instance1", "app", "tenant", 1, 1L);
+ Application instance2 = tester.createApplication("instance2", "app", "tenant", 2, 1L);
+ ApplicationPackage applicationPackage = new ApplicationPackageBuilder()
+ .upgradePolicy("default")
+ .environment(Environment.prod)
+ .region("us-west-1")
+ .build();
+
+ Version version = Version.fromString("6.2");
+ tester.upgradeSystem(version);
+
+ // Deploy completely once
+ tester.jobCompletion(component).application(instance1).uploadArtifact(applicationPackage).submit();
+ tester.deployAndNotify(instance1, applicationPackage, true, JobType.systemTest);
+ tester.deployAndNotify(instance1, applicationPackage, true, JobType.stagingTest);
+ tester.deployAndNotify(instance1, applicationPackage, true, JobType.productionUsWest1);
+
+ tester.jobCompletion(component).application(instance2).uploadArtifact(applicationPackage).submit();
+ tester.deployAndNotify(instance2, applicationPackage, true, JobType.systemTest);
+ tester.deployAndNotify(instance2, applicationPackage, true, JobType.stagingTest);
+ tester.deployAndNotify(instance2, applicationPackage, true, JobType.productionUsWest1);
+
+ // New version is released
+ Version newVersion = Version.fromString("6.3");
+ tester.upgradeSystem(newVersion);
+
+ // instance1 upgrades, but not instance 2
+ tester.deployAndNotify(instance1, applicationPackage, true, JobType.systemTest);
+ tester.deployAndNotify(instance1, applicationPackage, true, JobType.stagingTest);
+ tester.deployAndNotify(instance1, applicationPackage, true, JobType.productionUsWest1);
+
+ Version instance1Version = tester.application(instance1.id()).deployments().get(JobType.productionUsWest1.zone(main)).version();
+ Version instance2Version = tester.application(instance2.id()).deployments().get(JobType.productionUsWest1.zone(main)).version();
+
+ assertEquals(newVersion, instance1Version);
+ assertEquals(version, instance2Version);
+ }
+
+ @Test
public void abortsInternalJobsOnNewApplicationChange() {
InternalDeploymentTester iTester = new InternalDeploymentTester();
DeploymentTester tester = iTester.tester();