aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2023-07-26 14:19:16 +0200
committerMartin Polden <mpolden@mpolden.no>2023-07-26 14:24:49 +0200
commit3a76941d0472bb2b3cdba72d2ffecc19c75cae4b (patch)
tree571c15af7bbea3910c96d4a2be366df5cad897f5
parent8527a87e966cc58cb071f52b40ca2d07a2f6c271 (diff)
Reduce cooldown period of new OS versions
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgradeScheduler.java9
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgradeSchedulerTest.java14
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/os/responses/versions-all-upgraded.json2
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/os/responses/versions-partially-upgraded.json2
4 files changed, 13 insertions, 14 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 5701a495641..9dd90163683 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
@@ -185,6 +185,9 @@ public class OsUpgradeScheduler extends ControllerMaintainer {
/** The day of week new releases are published */
private static final DayOfWeek RELEASE_DAY = DayOfWeek.TUESDAY;
+ /** How far into release day we should wait before triggering. This is to give the new release some time to propagate */
+ private static final Duration COOLDOWN = Duration.ofHours(6);
+
public CalendarVersionedRelease {
Objects.requireNonNull(system);
}
@@ -197,15 +200,11 @@ public class OsUpgradeScheduler extends ControllerMaintainer {
predicatedInstant = predicatedInstant.plus(Duration.ofDays(1));
version = findVersion(predicatedInstant, currentVersion);
}
- Duration cooldown = remainingCooldownOf(cooldown(), version.age(instant));
+ Duration cooldown = remainingCooldownOf(COOLDOWN, version.age(instant));
Instant schedulingInstant = schedulingInstant(instant.plus(cooldown), system);
return Optional.of(new Change(new OsVersion(version.version(), cloud), schedulingInstant));
}
- private Duration cooldown() {
- return Duration.ofDays(1); // Give new releases some time to propagate
- }
-
/** Find the most recent version available according to the scheduling step, relative to now */
static CalendarVersion findVersion(Instant now, Version currentVersion) {
Instant candidate = START_OF_SCHEDULE;
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 84227b4fd9f..22893287979 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
@@ -60,8 +60,8 @@ public class OsUpgradeSchedulerTest {
// New release becomes available, but is not triggered until cool-down period has passed, and we're inside a
// trigger period
Version version1 = Version.fromString("7.0.0.20220301");
- tester.clock().advance(Duration.ofDays(14));
- assertEquals("2022-03-01T09:05:00", formatInstant(tester.clock().instant()));
+ tester.clock().advance(Duration.ofDays(13).plusHours(15));
+ assertEquals("2022-03-01T00:05:00", formatInstant(tester.clock().instant()));
// Change does not become available until certification
assertFalse(scheduler.changeIn(cloud, tester.clock().instant()).isPresent());
@@ -76,12 +76,12 @@ public class OsUpgradeSchedulerTest {
tester.controller().os().target(cloud).get().osVersion().version(),
"Target is unchanged because cooldown hasn't passed");
tester.clock().advance(Duration.ofDays(3).plusHours(18));
- assertEquals("2022-03-05T03:05:00", formatInstant(tester.clock().instant()));
+ assertEquals("2022-03-04T18:05:00", formatInstant(tester.clock().instant()));
scheduler.maintain();
assertEquals(version0,
tester.controller().os().target(cloud).get().osVersion().version(),
"Target is unchanged because we're outside trigger period");
- tester.clock().advance(Duration.ofDays(2).plusHours(5));
+ tester.clock().advance(Duration.ofDays(2).plusHours(14));
assertEquals("2022-03-07T08:05:00", formatInstant(tester.clock().instant()));
// Time constraints have now passed, but the current target has been pinned in the meantime
@@ -111,7 +111,7 @@ public class OsUpgradeSchedulerTest {
Optional<OsUpgradeScheduler.Change> nextChange = scheduler.changeIn(cloud, tester.clock().instant());
assertTrue(nextChange.isPresent());
assertEquals(expected, nextChange.get().osVersion().version());
- assertEquals("2022-04-27T07:00:00", formatInstant(nextChange.get().scheduleAt()));
+ assertEquals("2022-04-26T07:00:00", formatInstant(nextChange.get().scheduleAt()));
}
@Test
@@ -135,7 +135,7 @@ public class OsUpgradeSchedulerTest {
scheduler.maintain();
assertEquals(version0, tester.controller().os().target(cloud).get().osVersion().version());
// Cool-down passes
- tester.clock().advance(Duration.ofDays(1));
+ tester.clock().advance(Duration.ofHours(4));
assertEquals(version1, scheduler.changeIn(cloud, tester.clock().instant()).get().osVersion().version());
scheduler.maintain();
assertEquals(version1, tester.controller().os().target(cloud).get().osVersion().version());
@@ -144,7 +144,7 @@ public class OsUpgradeSchedulerTest {
Optional<OsUpgradeScheduler.Change> nextChange = scheduler.changeIn(cloud, tester.clock().instant());
assertTrue(nextChange.isPresent());
assertEquals("7.0.0.20220426", nextChange.get().osVersion().version().toFullString());
- assertEquals("2022-04-27T02:00:00", formatInstant(nextChange.get().scheduleAt()));
+ assertEquals("2022-04-26T06:00:00", formatInstant(nextChange.get().scheduleAt()));
}
@Test
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/os/responses/versions-all-upgraded.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/os/responses/versions-all-upgraded.json
index 0f2e05986b6..63a85bc5aad 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/os/responses/versions-all-upgraded.json
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/os/responses/versions-all-upgraded.json
@@ -107,7 +107,7 @@
"scheduledAt": 1234,
"pinned": false,
"nextVersion": "8.2.1.20211228",
- "nextScheduledAt": 1640743200000,
+ "nextScheduledAt": 1640671200000,
"cloud": "cloud2",
"nodes": [
{
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/os/responses/versions-partially-upgraded.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/os/responses/versions-partially-upgraded.json
index 20d7147a258..75e68b00676 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/os/responses/versions-partially-upgraded.json
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/os/responses/versions-partially-upgraded.json
@@ -166,7 +166,7 @@
"scheduledAt": 1234,
"pinned": false,
"nextVersion": "8.2.1.20211228",
- "nextScheduledAt": 1640743200000,
+ "nextScheduledAt": 1640671200000,
"cloud": "cloud2",
"nodes": [ ]
}