summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Marius Venstad <jonmv@users.noreply.github.com>2022-09-06 14:38:58 +0200
committerGitHub <noreply@github.com>2022-09-06 14:38:58 +0200
commitc2236fbba225babc5088cc9a06638b76b2183b69 (patch)
tree4fdfdccef28b5ee441a87d5fdd75a564b90b2333
parent227374cf22fe0691aecf5727a0582c0bd11783b7 (diff)
parentbcfedebf7390926b9f3ae523e1cb1bbadee50f53 (diff)
Merge pull request #23947 from vespa-engine/jonmv/handle-specified-major-but-no-deployments
Handle specifying major version, with no deployments
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java8
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java5
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