diff options
author | Jon Marius Venstad <venstad@gmail.com> | 2022-01-13 11:15:42 +0100 |
---|---|---|
committer | Jon Marius Venstad <venstad@gmail.com> | 2022-01-13 11:15:42 +0100 |
commit | 624f7305c5e497d1fc834cd0a39734541bd2d11c (patch) | |
tree | 449292c6f0b4193744b837443affc6e1b06bb2ca /controller-server | |
parent | 831833e0ad5952e7789ede7382fe6ee6f3f535f0 (diff) |
Allow setting an older build as target application
Diffstat (limited to 'controller-server')
3 files changed, 16 insertions, 4 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentStatus.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentStatus.java index b76f6c25bc4..e7521b37dbf 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentStatus.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentStatus.java @@ -613,6 +613,9 @@ public class DeploymentStatus { && ! existingDeployment.map(Deployment::version).equals(change.platform())) return Optional.empty(); + if (change.application().isPresent() && ! existingDeployment.map(Deployment::applicationVersion).equals(change.application())) + return Optional.empty(); + Change fullChange = status.application().require(instance).change(); if (existingDeployment.map(deployment -> ! (change.upgrades(deployment.version()) || change.upgrades(deployment.applicationVersion())) && (fullChange.downgrades(deployment.version()) || fullChange.downgrades(deployment.applicationVersion()))) diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/Versions.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/Versions.java index 779ce6fa7fe..1e183d44377 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/Versions.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/Versions.java @@ -126,8 +126,9 @@ public class Versions { private static ApplicationVersion targetApplication(Application application, Change change, Optional<Deployment> deployment) { - return max(change.application(), deployment.map(Deployment::applicationVersion)) - .orElseGet(() -> defaultApplicationVersion(application)); + return change.application() + .or(() -> deployment.map(Deployment::applicationVersion)) + .orElseGet(() -> defaultApplicationVersion(application)); } private static ApplicationVersion defaultApplicationVersion(Application application) { 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 a622d9e0534..e5c9efa280a 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 @@ -473,10 +473,18 @@ public class DeploymentTriggerTest { // Triggering a roll-out of an already deployed application is a no-op. assertEquals(Change.empty(), app.instance().change()); - tester.deploymentTrigger().forceChange(app.instanceId(), Change.of(appVersion0)); - assertEquals(Change.empty(), app.instance().change()); tester.deploymentTrigger().forceChange(app.instanceId(), Change.of(appVersion1)); assertEquals(Change.empty(), app.instance().change()); + + // Downgrading application version. + tester.deploymentTrigger().forceChange(app.instanceId(), Change.of(appVersion0)); + assertEquals(Change.of(appVersion0), app.instance().change()); + app.runJob(stagingTest) + .runJob(productionUsCentral1) + .runJob(productionUsEast3) + .runJob(productionUsWest1); + assertEquals(Change.empty(), app.instance().change()); + assertEquals(appVersion0, app.instance().deployments().get(productionUsEast3.zone(tester.controller().system())).applicationVersion()); } @Test |