From efe9562b106294b073696f286b27a383742c0371 Mon Sep 17 00:00:00 2001 From: Martin Polden Date: Tue, 2 Jan 2024 12:06:27 +0100 Subject: Skip check of OS version availability in node response --- .../java/com/yahoo/vespa/hosted/provision/os/OsUpgrader.java | 11 ++++++++--- .../java/com/yahoo/vespa/hosted/provision/os/OsVersions.java | 10 +++------- .../yahoo/vespa/hosted/provision/restapi/NodesResponse.java | 2 +- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/OsUpgrader.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/OsUpgrader.java index 9e931463999..f56e75518a3 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/OsUpgrader.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/OsUpgrader.java @@ -53,6 +53,7 @@ public abstract class OsUpgrader { /** Returns whether node can upgrade to version at given instant */ final boolean canUpgradeTo(Version version, Instant instant, Node node) { + if (deferringUpgrade(node, instant)) return false; Set versions = nodeRepository.osVersions().availableTo(node, version); boolean versionAvailable = versions.contains(version); if (!versionAvailable) { @@ -60,9 +61,13 @@ public abstract class OsUpgrader { version.toFullString() + ", but this version does not exist in " + node.cloudAccount() + ". Found " + versions.stream().sorted().toList()); } - return versionAvailable && - (node.status().osVersion().downgrading() || // Fast-track downgrades - node.history().age(instant).compareTo(gracePeriod()) > 0); + return versionAvailable; + } + + /** Returns whether node is deferring upgrade at given instant */ + final boolean deferringUpgrade(Node node, Instant instant) { + return !node.status().osVersion().downgrading() && // Never defer downgrades + node.history().age(instant).compareTo(gracePeriod()) <= 0; } /** The duration this leaves new nodes alone before scheduling any upgrade */ diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/OsVersions.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/OsVersions.java index 0bc074cba23..f5706d3b8c9 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/OsVersions.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/OsVersions.java @@ -159,13 +159,9 @@ public class OsVersions { } } - /** Returns whether node can be upgraded now */ - public boolean canUpgrade(Node node) { - Optional wantedVersion = node.status().osVersion().wanted(); - if (wantedVersion.isEmpty()) { - return false; - } - return chooseUpgrader(node.type(), Optional.empty()).canUpgradeTo(wantedVersion.get(), nodeRepository.clock().instant(), node); + /** Returns whether node is currently deferring its upgrade */ + public boolean deferringUpgrade(Node node) { + return chooseUpgrader(node.type(), Optional.empty()).deferringUpgrade(node, nodeRepository.clock().instant()); } /** Returns the upgrader to use when upgrading given node type to target */ diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesResponse.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesResponse.java index 5c379fb1608..b8c841771f5 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesResponse.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesResponse.java @@ -167,7 +167,7 @@ class NodesResponse extends SlimeJsonResponse { node.status().osVersion().current().ifPresent(version -> object.setString("currentOsVersion", version.toFullString())); node.status().osVersion().wanted().ifPresent(version -> object.setString("wantedOsVersion", version.toFullString())); if (node.type().isHost()) { - object.setBool("deferOsUpgrade", !nodeRepository.osVersions().canUpgrade(node)); + object.setBool("deferOsUpgrade", nodeRepository.osVersions().deferringUpgrade(node)); } node.status().firmwareVerifiedAt().ifPresent(instant -> object.setLong("currentFirmwareCheck", instant.toEpochMilli())); if (node.type().isHost()) -- cgit v1.2.3