diff options
author | Jon Marius Venstad <venstad@gmail.com> | 2022-03-11 16:57:06 +0100 |
---|---|---|
committer | Jon Marius Venstad <venstad@gmail.com> | 2022-03-11 16:57:06 +0100 |
commit | 10de54c5cb765e9994da3b12681ae98c59000d3b (patch) | |
tree | 29bf6f088d3555bf62233e672ea28d283f50c538 /configserver | |
parent | a943db2029d7b78eb3dca70bf5a6a4377d9ae743 (diff) |
Check wanted version instead of newest built model
Diffstat (limited to 'configserver')
2 files changed, 23 insertions, 16 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/application/TenantApplications.java b/configserver/src/main/java/com/yahoo/vespa/config/server/application/TenantApplications.java index 7c669f290d3..5e9e1e8bf33 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/application/TenantApplications.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/application/TenantApplications.java @@ -390,10 +390,10 @@ public class TenantApplications implements RequestHandler, HostValidator<Applica @Override public boolean compatibleWith(Optional<Version> vespaVersion, ApplicationId application) { if (vespaVersion.isEmpty()) return true; - Version latestDeployed = applicationMapper.getForVersion(application, Optional.empty(), clock.instant()) - .getVespaVersion(); - boolean compatibleMajor = !incompatibleMajorVersions.value().contains(latestDeployed.getMajor()); - return compatibleMajor || vespaVersion.get().getMajor() == latestDeployed.getMajor(); + Version wantedVersion = applicationMapper.getForVersion(application, Optional.empty(), clock.instant()) + .getModel().wantedNodeVersion(); + boolean compatibleMajor = ! incompatibleMajorVersions.value().contains(wantedVersion.getMajor()); + return compatibleMajor || vespaVersion.get().getMajor() == wantedVersion.getMajor(); } @Override diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/application/TenantApplicationsTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/application/TenantApplicationsTest.java index 2b361e825e5..c95c95750a1 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/application/TenantApplicationsTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/application/TenantApplicationsTest.java @@ -3,10 +3,12 @@ package com.yahoo.vespa.config.server.application; import com.yahoo.cloud.config.ConfigserverConfig; import com.yahoo.component.Version; +import com.yahoo.component.Vtag; import com.yahoo.concurrent.InThreadExecutorService; import com.yahoo.concurrent.StripedExecutor; import com.yahoo.config.model.NullConfigModelRegistry; import com.yahoo.config.model.application.provider.FilesApplicationPackage; +import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.TenantName; import com.yahoo.text.Utf8; @@ -50,6 +52,7 @@ import java.util.Optional; import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Function; +import java.util.function.Supplier; import java.util.stream.IntStream; import static com.yahoo.vespa.config.server.application.TenantApplications.RemoveApplicationWaiter; @@ -151,6 +154,19 @@ public class TenantApplicationsTest { assertEquals(0, repo.activeApplications().size()); } + private static ApplicationSet createSet(ApplicationId id, Version version) throws IOException, SAXException { + VespaModel model = new VespaModel(new NullConfigModelRegistry(), + new DeployState.Builder().wantedNodeVespaVersion(version) + .applicationPackage(FilesApplicationPackage.fromFile(new File("src/test/apps/app"))) + .build()); + return ApplicationSet.from(new Application(model, + new ServerCache(), + 1, + Version.emptyVersion, + MetricUpdater.createTestUpdater(), + id)); + } + @Test public void major_version_compatibility() throws Exception { InMemoryFlagSource flagSource = new InMemoryFlagSource(); @@ -158,30 +174,21 @@ public class TenantApplicationsTest { ApplicationId app1 = createApplicationId("myapp"); applications.createApplication(app1); applications.createPutTransaction(app1, 1).commit(); - VespaModel model = new VespaModel(FilesApplicationPackage.fromFile(new File("src/test/apps/app"))); - Function<Version, ApplicationSet> createApplicationSet = (version) -> { - return ApplicationSet.from(new Application(model, - new ServerCache(), - 1, - version, - MetricUpdater.createTestUpdater(), - app1)); - }; Version deployedVersion0 = Version.fromString("6.1"); - applications.activateApplication(createApplicationSet.apply(deployedVersion0), 1); + applications.activateApplication(createSet(app1, deployedVersion0), 1); assertTrue("Empty version is compatible", applications.compatibleWith(Optional.empty(), app1)); Version nodeVersion0 = Version.fromString("6.0"); assertTrue("Lower version is compatible", applications.compatibleWith(Optional.of(nodeVersion0), app1)); Version deployedVersion1 = Version.fromString("7.1"); - applications.activateApplication(createApplicationSet.apply(deployedVersion1), 1); + applications.activateApplication(createSet(app1, deployedVersion1), 1); assertTrue("New major is compatible", applications.compatibleWith(Optional.of(nodeVersion0), app1)); flagSource.withListFlag(PermanentFlags.INCOMPATIBLE_MAJOR_VERSIONS.id(), List.of(8), Integer.class); Version deployedVersion2 = Version.fromString("8.1"); - applications.activateApplication(createApplicationSet.apply(deployedVersion2), 1); + applications.activateApplication(createSet(app1, deployedVersion2), 1); assertFalse("New major is incompatible", applications.compatibleWith(Optional.of(nodeVersion0), app1)); Version nodeVersion1 = Version.fromString("8.0"); |