diff options
author | Jon Marius Venstad <venstad@gmail.com> | 2021-08-19 11:49:10 +0200 |
---|---|---|
committer | Jon Marius Venstad <venstad@gmail.com> | 2021-08-19 11:49:10 +0200 |
commit | d360cfdd5dc6dc5c6475c17dc6b961786e6b7c34 (patch) | |
tree | cfb60d5f7608c78a2bebc6ea42a8075637a5cac8 /controller-server | |
parent | 5b61adcd248e9bd9f191c21c6d0a6dc39cf78d60 (diff) |
Allow configuring upgrade rollout in deployment.xml
Diffstat (limited to 'controller-server')
3 files changed, 34 insertions, 4 deletions
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 4e6df1921b6..aab4e943b94 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 @@ -411,6 +411,8 @@ public class DeploymentTrigger { private boolean acceptNewApplicationVersion(DeploymentStatus status, InstanceName instance) { if (status.application().require(instance).change().application().isPresent()) return true; // Replacing a previous application change is ok. if (status.hasFailures()) return true; // Allow changes to fix upgrade problems. + if (status.application().deploymentSpec().instance(instance) // Leading upgrade allows app change to join in. + .map(spec -> spec.upgradeRollout() == DeploymentSpec.UpgradeRollout.leading).orElse(false)) return true; return status.application().require(instance).change().platform().isEmpty(); } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/ApplicationPackageBuilder.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/ApplicationPackageBuilder.java index 808409cf793..b234ab4960b 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/ApplicationPackageBuilder.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/ApplicationPackageBuilder.java @@ -53,6 +53,7 @@ public class ApplicationPackageBuilder { private OptionalInt majorVersion = OptionalInt.empty(); private String instances = "default"; private String upgradePolicy = null; + private String upgradeRollout = null; private String globalServiceId = null; private String athenzIdentityAttributes = null; private String searchDefinition = "search test { }"; @@ -75,6 +76,11 @@ public class ApplicationPackageBuilder { return this; } + public ApplicationPackageBuilder upgradeRollout(String upgradeRollout) { + this.upgradeRollout = upgradeRollout; + return this; + } + public ApplicationPackageBuilder globalServiceId(String globalServiceId) { this.globalServiceId = globalServiceId; return this; @@ -221,10 +227,11 @@ public class ApplicationPackageBuilder { } xml.append(">\n"); xml.append(" <instance id='").append(instances).append("'>\n"); - if (upgradePolicy != null) { - xml.append(" <upgrade policy='"); - xml.append(upgradePolicy); - xml.append("'/>\n"); + if (upgradePolicy != null || upgradeRollout != null) { + xml.append(" <upgrade "); + if (upgradePolicy != null) xml.append("policy='").append(upgradePolicy).append("' "); + if (upgradeRollout != null) xml.append("rollout='").append(upgradeRollout).append("' "); + xml.append("/>\n"); } xml.append(notifications); if (explicitSystemTest) 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 7077e14a648..70a967ecef9 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 @@ -107,6 +107,27 @@ public class DeploymentTriggerTest { } @Test + public void leadingUpgradeAllowsApplicationChangeWhileUpgrading() { + var applicationPackage = new ApplicationPackageBuilder().region("us-east-3") + .upgradeRollout("leading") + .build(); + var app = tester.newDeploymentContext(); + + app.submit(applicationPackage).deploy(); + + Change upgrade = Change.of(new Version("7.8.9")); + tester.controllerTester().upgradeSystem(upgrade.platform().get()); + tester.upgrader().maintain(); + app.runJob(systemTest).runJob(stagingTest); + tester.triggerJobs(); + app.assertRunning(productionUsEast3); + assertEquals(upgrade, app.instance().change()); + + app.submit(applicationPackage); + assertEquals(upgrade.with(app.lastSubmission().get()), app.instance().change()); + } + + @Test public void abortsJobsOnNewApplicationChange() { var app = tester.newDeploymentContext(); app.submit() |