diff options
author | Martin Polden <mpolden@mpolden.no> | 2022-07-14 12:00:44 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2022-07-14 12:01:28 +0200 |
commit | f81a884bb91355e73fade9a759f3abe1e2fce128 (patch) | |
tree | 21ed83edc2818369cf72d6fe727bf450be8b851a /controller-server | |
parent | b377a884f9ef9f2a83e54fc100aa26d85746d71d (diff) |
Include nodes deferring upgrade in version status
Diffstat (limited to 'controller-server')
3 files changed, 10 insertions, 8 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgrader.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgrader.java index 8155476f139..4850f005ac7 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgrader.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgrader.java @@ -62,7 +62,7 @@ public class OsUpgrader extends InfrastructureUpgrader<OsVersionTarget> { protected boolean expectUpgradeOf(Node node, SystemApplication application, ZoneApi zone) { return cloud.equals(zone.getCloudName()) && // Cloud is managed by this upgrader application.shouldUpgradeOs() && // Application should upgrade in this cloud - canUpgrade(node); + canUpgrade(node, false); } @Override @@ -102,8 +102,8 @@ public class OsUpgrader extends InfrastructureUpgrader<OsVersionTarget> { } /** Returns whether node currently allows upgrades */ - public static boolean canUpgrade(Node node) { - return !node.deferOsUpgrade() && upgradableNodeStates.contains(node.state()); + public static boolean canUpgrade(Node node, boolean includeDeferring) { + return (includeDeferring || !node.deferOsUpgrade()) && upgradableNodeStates.contains(node.state()); } private static String name(CloudName cloud) { diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/OsVersionStatus.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/OsVersionStatus.java index 8ee891ae8a6..d6356f294dc 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/OsVersionStatus.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/OsVersionStatus.java @@ -66,7 +66,7 @@ public record OsVersionStatus(Map<OsVersion, List<NodeVersion>> versions) { .orElse(Version.emptyVersion); for (var node : controller.serviceRegistry().configServer().nodeRepository().list(zone.getVirtualId(), NodeFilter.all().applications(application.id()))) { - if (!OsUpgrader.canUpgrade(node)) continue; + if (!OsUpgrader.canUpgrade(node, true)) continue; Optional<Instant> suspendedAt = node.suspendedSince(); NodeVersion nodeVersion = new NodeVersion(node.hostname(), zone.getVirtualId(), node.currentOsVersion(), targetOsVersion, suspendedAt); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgraderTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgraderTest.java index 3a5b4a90baa..0b987bff6ce 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgraderTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgraderTest.java @@ -94,7 +94,7 @@ public class OsUpgraderTest { completeUpgrade(version1, SystemApplication.tenantHost, zone1); statusUpdater.maintain(); assertEquals(5, nodesOn(version1).size()); - assertEquals(10, nodesOn(Version.emptyVersion).size()); + assertEquals(11, nodesOn(Version.emptyVersion).size()); // zone 2 and 3: begins upgrading osUpgrader.maintain(); @@ -121,8 +121,10 @@ public class OsUpgraderTest { osUpgrader.maintain(); assertWanted(version1, SystemApplication.tenantHost, zone1, zone2, zone3, zone4); statusUpdater.maintain(); - assertTrue("All nodes on target version", tester.controller().osVersionStatus().nodesIn(cloud1).stream() - .allMatch(node -> node.currentVersion().equals(version1))); + assertTrue("All non-deferring nodes are on target version", + tester.controller().osVersionStatus().nodesIn(cloud1).stream() + .filter(node -> !node.hostname().equals(nodeDeferringOsUpgrade.hostname())) + .allMatch(node -> node.currentVersion().equals(version1))); } @Test @@ -274,7 +276,7 @@ public class OsUpgraderTest { private List<Node> nodesRequiredToUpgrade(ZoneApi zone, SystemApplication application) { return nodeRepository().list(zone.getVirtualId(), NodeFilter.all().applications(application.id())) .stream() - .filter(OsUpgrader::canUpgrade) + .filter(node -> OsUpgrader.canUpgrade(node, false)) .collect(Collectors.toList()); } |