diff options
author | Martin Polden <mpolden@mpolden.no> | 2022-08-23 14:03:54 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2022-08-23 14:04:20 +0200 |
commit | d378e7c5f368913de5cbcc4ed37868a2d3f3d594 (patch) | |
tree | e2aa72f2776595a04a2efea7eec182003e6c5718 /controller-server | |
parent | c6db4ee70b7a3c97306c9e636f0cf86bfcb79883 (diff) |
Ensure cooldown is calculated relative to current time
Diffstat (limited to 'controller-server')
2 files changed, 36 insertions, 2 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 beba542760c..6f4a8429c74 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 @@ -160,9 +160,10 @@ public class OsUpgradeScheduler extends ControllerMaintainer { @Override public Optional<Change> change(Version currentVersion, Instant instant) { CalendarVersion version = findVersion(instant, currentVersion); + Instant predicatedInstant = instant; while (!version.version().isAfter(currentVersion)) { - instant = instant.plus(Duration.ofDays(1)); - version = findVersion(instant, currentVersion); + predicatedInstant = predicatedInstant.plus(Duration.ofDays(1)); + version = findVersion(predicatedInstant, currentVersion); } Duration cooldown = remainingCooldownAt(instant, version); Instant schedulingInstant = schedulingInstant(instant.plus(cooldown), system); 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 31a1fe96fb7..016db28c2aa 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 @@ -95,6 +95,39 @@ public class OsUpgradeSchedulerTest { } @Test + void schedule_calendar_versioned_release_in_cd() { + ControllerTester tester = new ControllerTester(SystemName.cd); + OsUpgradeScheduler scheduler = new OsUpgradeScheduler(tester.controller(), Duration.ofDays(1)); + Instant t0 = Instant.parse("2022-01-16T02:05:00.00Z"); // Inside trigger period + tester.clock().setInstant(t0); + CloudName cloud = CloudName.from("cloud"); + ZoneApi zone = zone("prod.us-west-1", cloud); + tester.zoneRegistry().setZones(zone).reprovisionToUpgradeOsIn(zone); + + // Set initial target + Version version0 = Version.fromString("7.0.0.20220101"); + tester.controller().upgradeOsIn(cloud, version0, Duration.ofDays(1), false); + + // Next version is triggered + Version version1 = Version.fromString("7.0.0.20220301"); + tester.clock().advance(Duration.ofDays(44)); + assertEquals("2022-03-01T02:05:00", formatInstant(tester.clock().instant())); + scheduler.maintain(); + assertEquals(version0, tester.controller().osVersionTarget(cloud).get().osVersion().version()); + // Cool-down passes + tester.clock().advance(Duration.ofDays(1)); + assertEquals(version1, scheduler.changeIn(cloud).get().version()); + scheduler.maintain(); + assertEquals(version1, tester.controller().osVersionTarget(cloud).get().osVersion().version()); + + // Estimate next change + Optional<OsUpgradeScheduler.Change> nextChange = scheduler.changeIn(cloud); + assertTrue(nextChange.isPresent()); + assertEquals("7.0.0.20220426", nextChange.get().version().toFullString()); + assertEquals("2022-04-27T02:00:00", formatInstant(nextChange.get().scheduleAt())); + } + + @Test void schedule_stable_release() { ControllerTester tester = new ControllerTester(); OsUpgradeScheduler scheduler = new OsUpgradeScheduler(tester.controller(), Duration.ofDays(1)); |