diff options
author | Jon Marius Venstad <jonmv@users.noreply.github.com> | 2022-09-06 14:38:58 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-06 14:38:58 +0200 |
commit | c2236fbba225babc5088cc9a06638b76b2183b69 (patch) | |
tree | 4fdfdccef28b5ee441a87d5fdd75a564b90b2333 | |
parent | 227374cf22fe0691aecf5727a0582c0bd11783b7 (diff) | |
parent | bcfedebf7390926b9f3ae523e1cb1bbadee50f53 (diff) |
Merge pull request #23947 from vespa-engine/jonmv/handle-specified-major-but-no-deployments
Handle specifying major version, with no deployments
2 files changed, 9 insertions, 4 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 e20fea03ff9..1227989a491 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 @@ -347,10 +347,10 @@ public class ApplicationController { // Target platforms are all versions not older than the oldest installed platform, unless forcing a major version change. // Only platforms not older than the system version, and with appropriate confidence, are considered targets. Predicate<Version> isTargetPlatform = wantedMajor.isEmpty() && oldestInstalledPlatform.isEmpty() - ? __ -> true - : wantedMajor.isEmpty() || wantedMajor.getAsInt() == oldestInstalledPlatform.get().getMajor() - ? version -> ! version.isBefore(oldestInstalledPlatform.get()) - : version -> wantedMajor.getAsInt() == version.getMajor(); + ? __ -> true // No preferences for version: any platform version is ok. + : wantedMajor.isEmpty() || (oldestInstalledPlatform.isPresent() && wantedMajor.getAsInt() == oldestInstalledPlatform.get().getMajor()) + ? version -> ! version.isBefore(oldestInstalledPlatform.get()) // Major empty, or on same as oldest: ensure not a platform downgrade. + : version -> wantedMajor.getAsInt() == version.getMajor(); // Major specified, and not on same as oldest (possibly empty): any on that major. Set<Version> platformVersions = versionStatus.deployableVersions().stream() .filter(version -> version.confidence().equalOrHigherThan(targetConfidence)) .map(VespaVersion::versionNumber) 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 e09e42c9900..96ca239b527 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 @@ -1166,7 +1166,12 @@ public class ControllerTest { tester.controllerTester().upgradeSystem(version0); tester.upgrader().overrideConfidence(version0, Confidence.normal); tester.controllerTester().computeVersionStatus(); + assertEquals(version0, tester.applications().compileVersion(application, OptionalInt.of(7))); assertEquals(version0, tester.applications().compileVersion(application, OptionalInt.empty())); + assertEquals("this system has no available versions on specified major: 8", + assertThrows(IllegalArgumentException.class, + () -> tester.applications().compileVersion(application, OptionalInt.of(8))) + .getMessage()); context.submit(applicationPackage).deploy(); // System is upgraded |