diff options
Diffstat (limited to 'controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java')
-rw-r--r-- | controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java | 15 |
1 files changed, 14 insertions, 1 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 3185b7d5f45..4a8670b9f9e 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 @@ -58,6 +58,7 @@ import com.yahoo.vespa.hosted.controller.rotation.RotationLock; import com.yahoo.vespa.hosted.controller.rotation.RotationRepository; import com.yahoo.vespa.hosted.controller.tenant.AthenzTenant; import com.yahoo.vespa.hosted.controller.tenant.Tenant; +import com.yahoo.vespa.hosted.controller.versions.VespaVersion; import com.yahoo.vespa.hosted.rotation.config.RotationsConfig; import com.yahoo.yolean.Exceptions; @@ -67,8 +68,10 @@ import java.net.URI; import java.time.Clock; import java.time.Duration; import java.time.Instant; +import java.util.ArrayDeque; import java.util.Collections; import java.util.Comparator; +import java.util.Deque; import java.util.EnumSet; import java.util.HashSet; import java.util.List; @@ -277,7 +280,9 @@ public class ApplicationController { ApplicationVersion applicationVersion; ApplicationPackage applicationPackage; if (canDeployDirectly) { - platformVersion = options.vespaVersion.map(Version::new).orElse(controller.systemVersion()); + platformVersion = options.vespaVersion.map(Version::new).orElse(application.get().deploymentSpec().majorVersion() + .flatMap(this::lastCompatibleVersion) + .orElse(controller.systemVersion())); applicationVersion = applicationVersionFromDeployer.orElse(ApplicationVersion.unknown); applicationPackage = applicationPackageFromDeployer.orElseThrow( () -> new IllegalArgumentException("Application package must be given when deploying to " + zone)); @@ -727,6 +732,14 @@ public class ApplicationController { }); } + /** Returns the latest known version within the given major. */ + private Optional<Version> lastCompatibleVersion(int targetMajorVersion) { + return controller.versionStatus().versions().stream() + .map(VespaVersion::versionNumber) + .filter(version -> version.getMajor() == targetMajorVersion) + .max(naturalOrder()); + } + private boolean isUserDeployment(Optional<AthenzIdentity> identity) { return identity .filter(id -> id instanceof AthenzUser) |