diff options
author | Martin Polden <mpolden@mpolden.no> | 2021-07-07 09:29:30 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2021-07-07 09:29:30 +0200 |
commit | 2262513c63aaeb6e107f0f694de6dffdf29a2322 (patch) | |
tree | 6f9a661d731df0b3bf166b8f3394ac8be1c6771a /controller-server | |
parent | bc34bb738f82b8891058a36891e791617d4d094d (diff) |
Never try to schedule older OS version
Diffstat (limited to 'controller-server')
2 files changed, 13 insertions, 4 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgradeScheduler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgradeScheduler.java index 5942291f2b0..c2addbe9a67 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgradeScheduler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgradeScheduler.java @@ -47,10 +47,9 @@ public class OsUpgradeScheduler extends ControllerMaintainer { if (currentTarget.isEmpty()) return; if (upgradingToNewMajor(cloud)) return; // Skip further upgrades until major version upgrade is complete - controller().upgradeOsIn(cloud, - release.version(currentTarget.get(), now), - release.upgradeBudget(), - false); + Version version = release.version(currentTarget.get(), now); + if (!version.isAfter(currentTarget.get().osVersion().version())) return; + controller().upgradeOsIn(cloud, version, release.upgradeBudget(), false); } private boolean upgradingToNewMajor(CloudName cloud) { diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgradeSchedulerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgradeSchedulerTest.java index d87dfcfa315..d80a8ce1152 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgradeSchedulerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgradeSchedulerTest.java @@ -132,6 +132,16 @@ public class OsUpgradeSchedulerTest { assertEquals("Target is unchanged as not enough time has passed", version1, target1.osVersion().version()); assertEquals("Target is not re-scheduled", target0.scheduledAt(), target1.scheduledAt()); + + // A newer version is triggered manually + Version version3 = Version.fromString("8.3"); + tester.controller().upgradeOsIn(cloud, version3, Duration.ZERO, false); + + // Enough time passes for stable version to be promoted. Nothing happens as stable is now before the manually + // triggered version + tester.clock().advance(Duration.ofDays(14).plus(Duration.ofSeconds(1))); + scheduler.maintain(); + assertEquals(version3, tester.controller().osVersionTarget(cloud).get().osVersion().version()); } private static ZoneApi zone(String id, CloudName cloud) { |