From 2febb592cedfe1b897843a547cd8eb632864bead Mon Sep 17 00:00:00 2001 From: Martin Polden Date: Thu, 11 Aug 2022 13:11:26 +0200 Subject: Use the earliest possible trigger time --- .../hosted/controller/maintenance/OsUpgradeScheduler.java | 5 +++-- .../controller/maintenance/OsUpgradeSchedulerTest.java | 13 ++++++++++--- 2 files changed, 13 insertions(+), 5 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 644a8c6c1ed..5fa90d98c18 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 @@ -62,9 +62,10 @@ public class OsUpgradeScheduler extends ControllerMaintainer { } else if (!wantedVersion.isAfter(currentVersion)) { return Optional.empty(); // No change right now, and we cannot predict the next change for this kind of release } - // Find trigger time + // Find the earliest possible trigger time on this day + instant = instant.truncatedTo(ChronoUnit.DAYS); while (!canTriggerAt(instant)) { - instant = instant.truncatedTo(ChronoUnit.HOURS).plus(Duration.ofHours(1)); + instant = instant.plus(Duration.ofHours(1)); } return Optional.of(new Change(wantedVersion, release.upgradeBudget(), instant)); } 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 fac15cd23c4..ddd2163b426 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 @@ -62,7 +62,11 @@ public class OsUpgradeSchedulerTest { assertEquals(version0, tester.controller().osVersionTarget(cloud).get().osVersion().version(), "Target is unchanged because we're outside trigger period"); - tester.clock().advance(Duration.ofHours(7).plusMinutes(5)); // Put us inside the trigger period + tester.clock().advance(Duration.ofHours(9).plusMinutes(5)); // Put us inside the trigger period + assertEquals("2022-03-17T09:05:00", formatInstant(tester.clock().instant())); + Optional change = scheduler.changeIn(cloud); + assertTrue(change.isPresent()); + assertEquals("2022-03-17T07:00:00", formatInstant(change.get().scheduleAt())); scheduler.maintain(); assertEquals(version1, tester.controller().osVersionTarget(cloud).get().osVersion().version(), @@ -77,8 +81,7 @@ public class OsUpgradeSchedulerTest { Optional nextChange = scheduler.changeIn(cloud); assertTrue(nextChange.isPresent()); assertEquals("7.0.0.20220425", nextChange.get().version().toFullString()); - assertEquals("2022-05-02T07:00:00", LocalDateTime.ofInstant(nextChange.get().scheduleAt(), ZoneOffset.UTC) - .format(DateTimeFormatter.ISO_DATE_TIME)); + assertEquals("2022-05-02T07:00:00", formatInstant(nextChange.get().scheduleAt())); } @Test @@ -163,4 +166,8 @@ public class OsUpgradeSchedulerTest { return ZoneApiMock.newBuilder().withId(id).with(cloud).build(); } + private static String formatInstant(Instant instant) { + return LocalDateTime.ofInstant(instant, ZoneOffset.UTC).format(DateTimeFormatter.ISO_DATE_TIME); + } + } -- cgit v1.2.3