diff options
author | Harald Musum <musum@yahooinc.com> | 2023-06-15 08:21:51 +0200 |
---|---|---|
committer | Harald Musum <musum@yahooinc.com> | 2023-06-15 08:21:51 +0200 |
commit | 88256ac09acee16def8b7d53a5dd92685bd7e181 (patch) | |
tree | c0958aa8a3975f357e76c8ad109af0b7c1944655 /configserver | |
parent | ccc9f2829e918846a444daea4434cab01e93241d (diff) |
SKip upgrade checks if VESPA_SKIP_UPGRADE_CHECK is true
Diffstat (limited to 'configserver')
3 files changed, 77 insertions, 33 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/version/VersionState.java b/configserver/src/main/java/com/yahoo/vespa/config/server/version/VersionState.java index 61c55641d23..19dae614f56 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/version/VersionState.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/version/VersionState.java @@ -37,30 +37,30 @@ public class VersionState { private final File versionFile; private final Curator curator; private final Version currentVersion; - private final boolean throwIfUpgradeBetweenVersionsTooFarApart; + private final boolean skipUpgradeCheck; @Inject public VersionState(ConfigserverConfig config, Curator curator) { this(new File(Defaults.getDefaults().underVespaHome(config.configServerDBDir()), "vespa_version"), curator, - config.hostedVespa()); + Boolean.parseBoolean(Optional.ofNullable(System.getenv("VESPA_SKIP_UPGRADE_CHECK")).orElse("false"))); } - public VersionState(File versionFile, Curator curator, boolean throwIfUpgradeBetweenVersionsTooFarApart) { + public VersionState(File versionFile, Curator curator, boolean skipUpgradeCheck) { this(versionFile, curator, new Version(VespaVersion.major, VespaVersion.minor, VespaVersion.micro), - throwIfUpgradeBetweenVersionsTooFarApart); + skipUpgradeCheck); } public VersionState(File versionFile, Curator curator, Version currentVersion, - boolean throwIfUpgradeBetweenVersionsTooFarApart) { + boolean skipUpgradeCheck) { this.versionFile = versionFile; this.curator = curator; this.currentVersion = currentVersion; - this.throwIfUpgradeBetweenVersionsTooFarApart = throwIfUpgradeBetweenVersionsTooFarApart; + this.skipUpgradeCheck = skipUpgradeCheck; } public boolean isUpgraded() { @@ -123,27 +123,34 @@ public class VersionState { int storedVersionMinor = storedVersion.getMinor(); int currentVersionMajor = currentVersion.getMajor(); int currentVersionMinor = currentVersion.getMinor(); - boolean sameMajor = storedVersionMajor == currentVersionMajor; boolean differentMajor = !sameMajor; + + String message = "Cannot upgrade from " + storedVersion + " to " + currentVersion(); if (storedVersionMajor < latestVersionOnPreviousMajor.getMajor()) - logOrThrow("Cannot upgrade from " + storedVersion + " to " + currentVersion() + - " (upgrade across 2 major versions not supported). Please upgrade to " + latestVersionOnPreviousMajor.toFullString() + " first."); + logOrThrow(message + " (upgrade across 2 major versions not supported). Please upgrade to " + + latestVersionOnPreviousMajor.toFullString() + " first." + + " Setting VESPA_SKIP_UPGRADE_CHECK=true will skip this check at your own risk," + + " see https://vespa.ai/releases.html#versions"); else if (sameMajor && (currentVersionMinor - storedVersionMinor > allowedMinorVersionInterval)) - logOrThrow("Cannot upgrade from " + storedVersion + " to " + currentVersion() + - ". Please upgrade to an intermediate version first, the interval between the two versions is too large."); + logOrThrow(message + ". Please upgrade to an older version first, the interval between the two versions is too large (> " + allowedMinorVersionInterval + " releases)." + + " Setting VESPA_SKIP_UPGRADE_CHECK=true will skip this check at your own risk," + + " see https://vespa.ai/releases.html#versions"); else if (differentMajor && storedVersionMinor < latestVersionOnPreviousMajor.getMinor()) - logOrThrow("Cannot upgrade directly from " + storedVersion + " to " + currentVersion() + " (new major version). Please upgrade to " + latestVersionOnPreviousMajor.toFullString() + " first."); + logOrThrow(message + " (new major version). Please upgrade to " + latestVersionOnPreviousMajor.toFullString() + " first." + + " Setting VESPA_SKIP_UPGRADE_CHECK=true will skip this check at your own risk," + + " see https://vespa.ai/releases.html#versions"); else if (differentMajor && currentVersionMinor > allowedMinorVersionInterval) - logOrThrow("Cannot upgrade from " + storedVersion + " to " + currentVersion() + - ". Please upgrade to an intermediate version first, the interval between the two versions is too large."); + logOrThrow(message + ". Please upgrade to an older version first, the interval between the two versions is too large (> " + allowedMinorVersionInterval + " releases)." + + " Setting VESPA_SKIP_UPGRADE_CHECK=true will skip this check at your own risk," + + " see https://vespa.ai/releases.html#versions"); } private void logOrThrow(String message) { - if (throwIfUpgradeBetweenVersionsTooFarApart) - throw new RuntimeException(message); - else + if (skipUpgradeCheck) log.log(WARNING, message); + else + throw new RuntimeException(message); } } diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/ConfigServerBootstrapTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/ConfigServerBootstrapTest.java index df0682b5156..a60b7babe35 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/ConfigServerBootstrapTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/ConfigServerBootstrapTest.java @@ -191,25 +191,54 @@ public class ConfigServerBootstrapTest { .build(); RpcServer rpcServer = createRpcServer(configserverConfig); - // Upgrade between two versions not too far apart, should work - Version versionToUpgradeTo = Version.fromString("8.110.1"); - Bootstrapper bootstrap = createBootstrapper(tester, rpcServer, VIP_STATUS_PROGRAMMATICALLY, versionToUpgradeTo); - bootstrap.versionState().storeVersion("8.100.1"); - bootstrap.doStart(); + assertUpgradeWorks("7,.594.36", "8.110.1", tester, rpcServer); + assertUpgradeWorks("8.100.1", "8.110.1", tester, rpcServer); assertUpgradeFails("8.100.1", "8.131.1", tester, rpcServer, - "Cannot upgrade from 8.100.1 to 8.131.1. Please upgrade to an intermediate version first, the interval between the two versions is too large."); + "Cannot upgrade from 8.100.1 to 8.131.1. Please upgrade to an older version first, " + + "the interval between the two versions is too large (> 30 releases)." + + " Setting VESPA_SKIP_UPGRADE_CHECK=true will skip this check at your own risk," + + " see https://vespa.ai/releases.html#versions"); assertUpgradeFails("7.99.1", "8.100.1", tester, rpcServer, - "Cannot upgrade directly from 7.99.1 to 8.100.1 (new major version). Please upgrade to 7.594.36 first."); + "Cannot upgrade from 7.99.1 to 8.100.1 (new major version). Please upgrade to 7.594.36 first." + + " Setting VESPA_SKIP_UPGRADE_CHECK=true will skip this check at your own risk," + + " see https://vespa.ai/releases.html#versions"); assertUpgradeFails("7.594.36", "8.121.1", tester, rpcServer, - "Cannot upgrade from 7.594.36 to 8.121.1. Please upgrade to an intermediate version first, the interval between the two versions is too large."); + "Cannot upgrade from 7.594.36 to 8.121.1. Please upgrade to an older version first," + + " the interval between the two versions is too large (> 30 releases)." + + " Setting VESPA_SKIP_UPGRADE_CHECK=true will skip this check at your own risk," + + " see https://vespa.ai/releases.html#versions"); assertUpgradeFails("6.11.11", "8.121.1", tester, rpcServer, - "Cannot upgrade from 6.11.11 to 8.121.1 (upgrade across 2 major versions not supported). Please upgrade to 7.594.36 first."); + "Cannot upgrade from 6.11.11 to 8.121.1 (upgrade across 2 major versions not supported)." + + " Please upgrade to 7.594.36 first." + + " Setting VESPA_SKIP_UPGRADE_CHECK=true will skip this check at your own risk," + + " see https://vespa.ai/releases.html#versions"); + + Version versionToUpgradeTo = Version.fromString("8.131.1"); + boolean skipUpgradeCheck = true; + VersionState versionState = createVersionState(tester.curator(), versionToUpgradeTo, skipUpgradeCheck); + assertUpgradeWorks("7.594.36", tester, rpcServer, versionState); + assertUpgradeWorks("8.100.1", tester, rpcServer, versionState); + } + + private void assertUpgradeWorks(String from, String to, DeployTester tester, RpcServer rpcServer) throws IOException { + Version versionToUpgradeTo = Version.fromString(to); + VersionState versionState = createVersionState(tester.curator(), versionToUpgradeTo); + Bootstrapper bootstrap = createBootstrapper(tester, rpcServer, VIP_STATUS_PROGRAMMATICALLY, versionState); + bootstrap.versionState().storeVersion(from); + bootstrap.doStart(); + } + + private void assertUpgradeWorks(String from, DeployTester tester, RpcServer rpcServer, VersionState versionState) { + Bootstrapper bootstrap = createBootstrapper(tester, rpcServer, VIP_STATUS_PROGRAMMATICALLY, versionState); + bootstrap.versionState().storeVersion(from); + bootstrap.doStart(); } private void assertUpgradeFails(String from, String to, DeployTester tester, RpcServer rpcServer, String expected) throws IOException { Version versionToUpgradeTo = Version.fromString(to); - Bootstrapper bootstrap = createBootstrapper(tester, rpcServer, VIP_STATUS_PROGRAMMATICALLY, versionToUpgradeTo); + VersionState versionState = createVersionState(tester.curator(), versionToUpgradeTo); + Bootstrapper bootstrap = createBootstrapper(tester, rpcServer, VIP_STATUS_PROGRAMMATICALLY, versionState); bootstrap.versionState().storeVersion(from); try { bootstrap.doStart(); @@ -220,12 +249,14 @@ public class ConfigServerBootstrapTest { } private Bootstrapper createBootstrapper(DeployTester tester, RpcServer rpcServer, VipStatusMode vipStatusMode) throws IOException { - return createBootstrapper(tester, rpcServer, vipStatusMode, new Version(VespaVersion.major, VespaVersion.minor, VespaVersion.micro)); + Version versionToUpgradeTo = new Version(VespaVersion.major, VespaVersion.minor, VespaVersion.micro); + return createBootstrapper(tester,rpcServer, vipStatusMode, createVersionState(tester.curator(), versionToUpgradeTo)); } - private Bootstrapper createBootstrapper(DeployTester tester, RpcServer rpcServer, VipStatusMode vipStatusMode, Version version) throws IOException { - VersionState versionState = createVersionState(tester.curator(), version); - + private Bootstrapper createBootstrapper(DeployTester tester, + RpcServer rpcServer, + VipStatusMode vipStatusMode, + VersionState versionState) { StateMonitor stateMonitor = StateMonitor.createForTesting(); VipStatus vipStatus = createVipStatus(stateMonitor); return new Bootstrapper(tester.applicationRepository(), @@ -292,7 +323,13 @@ public class ConfigServerBootstrapTest { } private VersionState createVersionState(Curator curator, Version vespaVersion) throws IOException { - return new VersionState(temporaryFolder.newFile(), curator, vespaVersion, true); + return new VersionState(temporaryFolder.newFile(), curator, vespaVersion, false); + } + + private VersionState createVersionState(Curator curator, + Version vespaVersion, + boolean throwIfUpgradeBetweenVersionsTooFarApart) throws IOException { + return new VersionState(temporaryFolder.newFile(), curator, vespaVersion, throwIfUpgradeBetweenVersionsTooFarApart); } public static class MockRpcServer extends com.yahoo.vespa.config.server.rpc.MockRpcServer { diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/version/VersionStateTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/version/VersionStateTest.java index 092243bac6d..917c05ad79b 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/version/VersionStateTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/version/VersionStateTest.java @@ -72,7 +72,7 @@ public class VersionStateTest { } private VersionState createVersionState() throws IOException { - return new VersionState(tempDir.newFile(), curator, false); + return new VersionState(tempDir.newFile(), curator, true); } } |