summaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2021-07-07 09:29:30 +0200
committerMartin Polden <mpolden@mpolden.no>2021-07-07 09:29:30 +0200
commit2262513c63aaeb6e107f0f694de6dffdf29a2322 (patch)
tree6f9a661d731df0b3bf166b8f3394ac8be1c6771a /controller-server
parentbc34bb738f82b8891058a36891e791617d4d094d (diff)
Never try to schedule older OS version
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgradeScheduler.java7
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgradeSchedulerTest.java10
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) {