diff options
author | Martin Polden <mpolden@mpolden.no> | 2023-09-15 15:22:55 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2023-09-15 15:28:43 +0200 |
commit | a11564b29887a3f11db934fe19ccfd1669be0613 (patch) | |
tree | fd533c0ca9eb81e1b43ec0eacc559bb38868d063 | |
parent | 42ac2093daaa58d77c75a1c39bbea6835a4459a7 (diff) |
Include certification status in /os/v1/
5 files changed, 25 insertions, 11 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 8d48576044b..dbca6681281 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 @@ -73,8 +73,10 @@ public class OsUpgradeScheduler extends ControllerMaintainer { Change change = releaseIn(cloud).change(currentVersion, now); if (!change.osVersion().version().isAfter(currentVersion)) return Optional.empty(); if (!future && !change.scheduleAt(now)) return Optional.empty(); - if (!certified(change)) return Optional.empty(); - return Optional.of(change); + + boolean certified = certified(change); + if (!future && !certified) return Optional.empty(); + return Optional.of(change.withCertified(certified)); } private boolean certified(Change change) { @@ -135,13 +137,17 @@ public class OsUpgradeScheduler extends ControllerMaintainer { } /** OS version change and the earliest time it can be scheduled */ - public record Change(OsVersion osVersion, Instant scheduleAt) { + public record Change(OsVersion osVersion, Instant scheduleAt, boolean certified) { public Change { Objects.requireNonNull(osVersion); Objects.requireNonNull(scheduleAt); } + public Change withCertified(boolean certified) { + return new Change(osVersion, scheduleAt, certified); + } + /** Returns whether this can be scheduled at given instant */ public boolean scheduleAt(Instant instant) { return !instant.isBefore(scheduleAt); @@ -163,7 +169,7 @@ public class OsUpgradeScheduler extends ControllerMaintainer { OsRelease release = artifactRepository.osRelease(currentVersion.getMajor(), OsRelease.Tag.latest); Duration cooldown = remainingCooldownOf(cooldown(), release.age(instant)); Instant scheduleAt = schedulingInstant(instant.plus(cooldown), system); - return new Change(new OsVersion(release.version(), cloud), scheduleAt); + return new Change(new OsVersion(release.version(), cloud), scheduleAt, false); } /** The cool-down period that must pass before a release can be used */ @@ -204,7 +210,7 @@ public class OsUpgradeScheduler extends ControllerMaintainer { } Duration cooldown = remainingCooldownOf(COOLDOWN, version.age(instant)); Instant schedulingInstant = schedulingInstant(instant.plus(cooldown), system); - return new Change(new OsVersion(version.version(), cloud), schedulingInstant); + return new Change(new OsVersion(version.version(), cloud), schedulingInstant, false); } /** Find the most recent version available according to the scheduling step, relative to now */ diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/os/OsApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/os/OsApiHandler.java index 1639424b182..1efccb8afe4 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/os/OsApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/os/OsApiHandler.java @@ -214,6 +214,7 @@ public class OsApiHandler extends AuditLoggingRequestHandler { nextChange.ifPresent(c -> { currentVersionObject.setString("nextVersion", c.osVersion().version().toFullString()); currentVersionObject.setLong("nextScheduledAt", c.scheduleAt().toEpochMilli()); + currentVersionObject.setBool("certified", c.certified()); }); }); 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 8fe2ac914ef..dd3174fce56 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 @@ -64,13 +64,17 @@ public class OsUpgradeSchedulerTest { assertEquals("2022-03-01T00:05:00", formatInstant(tester.clock().instant())); // Change does not become available until certification - assertFalse(scheduler.changeIn(cloud, tester.clock().instant(), true).isPresent()); + Optional<OsUpgradeScheduler.Change> change = scheduler.changeIn(cloud, tester.clock().instant(), true); + assertTrue(change.isPresent()); + assertFalse(change.get().certified()); Version systemVersion = tester.controller().readSystemVersion(); Version olderThanSystemVersion = new Version(systemVersion.getMajor(), systemVersion.getMinor() - 1, systemVersion.getMicro()); tester.controller().os().certify(version1, cloud, olderThanSystemVersion); // Change is now certified - assertEquals(version1, scheduler.changeIn(cloud, tester.clock().instant(), true).get().osVersion().version()); + change = scheduler.changeIn(cloud, tester.clock().instant(), true); + assertTrue(change.isPresent() && change.get().certified()); + assertEquals(version1, change.get().osVersion().version()); scheduler.maintain(); assertEquals(version0, tester.controller().os().target(cloud).get().osVersion().version(), @@ -86,8 +90,9 @@ public class OsUpgradeSchedulerTest { // Time constraints have now passed, but the current target has been pinned in the meantime tester.controller().os().upgradeTo(version0, cloud, false, true); - Optional<OsUpgradeScheduler.Change> change = scheduler.changeIn(cloud, tester.clock().instant(), true); + change = scheduler.changeIn(cloud, tester.clock().instant(), true); assertTrue(change.isPresent()); + assertTrue(change.get().certified()); assertEquals(-1, scheduler.maintain()); assertEquals(version0, tester.controller().os().target(cloud).get().osVersion().version(), @@ -97,8 +102,8 @@ public class OsUpgradeSchedulerTest { tester.controller().os().upgradeTo(version0, cloud, false, false); scheduler.maintain(); assertEquals(version1, - tester.controller().os().target(cloud).get().osVersion().version(), - "New target set"); + tester.controller().os().target(cloud).get().osVersion().version(), + "New target set"); // A few more days pass and target remains unchanged tester.clock().advance(Duration.ofDays(2)); @@ -167,7 +172,7 @@ public class OsUpgradeSchedulerTest { // No change yet because it hasn't been certified Optional<OsUpgradeScheduler.Change> nextChange = scheduler.changeIn(cloud, tester.clock().instant(), true); - assertFalse(nextChange.isPresent(), "No change"); + assertFalse(nextChange.get().certified(), "No change"); // Change is certified and upgrade is scheduled Version systemVersion = tester.controller().readSystemVersion(); 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 63a85bc5aad..e3d8f877330 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 @@ -108,6 +108,7 @@ "pinned": false, "nextVersion": "8.2.1.20211228", "nextScheduledAt": 1640671200000, + "certified": true, "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 75e68b00676..d3b5ac06982 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 @@ -167,6 +167,7 @@ "pinned": false, "nextVersion": "8.2.1.20211228", "nextScheduledAt": 1640671200000, + "certified": true, "cloud": "cloud2", "nodes": [ ] } |