diff options
Diffstat (limited to 'node-repository')
8 files changed, 23 insertions, 15 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Nodes.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Nodes.java index 4575633a379..b507d66e14f 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Nodes.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Nodes.java @@ -235,10 +235,11 @@ public class Nodes { if ( ! zone.environment().isProduction() || zone.system().isCd()) return deallocate(nodes, Agent.application, "Deactivated by application", transaction.nested()); - var stateless = NodeList.copyOf(nodes).stateless(); - var stateful = NodeList.copyOf(nodes).stateful(); - var statefulToInactive = stateful.not().reusable(); - var statefulToDirty = stateful.reusable(); + NodeList nodeList = NodeList.copyOf(nodes); + NodeList stateless = nodeList.stateless(); + NodeList stateful = nodeList.stateful(); + NodeList statefulToInactive = stateful.not().reusable(); + NodeList statefulToDirty = stateful.reusable(); List<Node> written = new ArrayList<>(); written.addAll(deallocate(stateless.asList(), Agent.application, "Deactivated by application", transaction.nested())); written.addAll(deallocate(statefulToDirty.asList(), Agent.application, "Deactivated by application (recycled)", transaction.nested())); 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 120b7f00b38..32fe9ba9f7b 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 @@ -34,12 +34,12 @@ public abstract class OsUpgrader { abstract void disableUpgrade(NodeType type); /** Returns the number of upgrade slots available for given target */ - final int upgradeSlots(OsVersionTarget target, NodeList activeNodes) { - if (!activeNodes.stream().allMatch(node -> node.type() == target.nodeType())) { + final int upgradeSlots(OsVersionTarget target, NodeList candidates) { + if (!candidates.stream().allMatch(node -> node.type() == target.nodeType())) { throw new IllegalArgumentException("All node types must type of OS version target " + target.nodeType()); } int max = target.nodeType() == NodeType.host ? maxActiveUpgrades.value() : 1; - int upgrading = activeNodes.changingOsVersionTo(target.version()).size(); + int upgrading = candidates.changingOsVersionTo(target.version()).size(); return Math.max(0, max - upgrading); } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/RebuildingOsUpgrader.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/RebuildingOsUpgrader.java index f6779d08fd7..212bf5ffb12 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/RebuildingOsUpgrader.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/RebuildingOsUpgrader.java @@ -67,7 +67,7 @@ public class RebuildingOsUpgrader extends OsUpgrader { // Rebuild hosts not containing stateful clusters with retiring nodes, up to rebuild limit NodeList activeHosts = hostsOfTargetType.state(Node.State.active); - int rebuildLimit = upgradeSlots(target, activeHosts); + int rebuildLimit = upgradeSlots(target, activeHosts.rebuilding(softRebuild)); List<Node> hostsToRebuild = new ArrayList<>(rebuildLimit); NodeList candidates = activeHosts.not().rebuilding(softRebuild) .osVersionIsBefore(target.version()) diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/RetiringOsUpgrader.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/RetiringOsUpgrader.java index 4d98885b72c..de4915d60aa 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/RetiringOsUpgrader.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/RetiringOsUpgrader.java @@ -56,7 +56,7 @@ public class RetiringOsUpgrader extends OsUpgrader { .osVersionIsBefore(target.version()) .matching(node -> canUpgradeAt(instant, node)) .byIncreasingOsVersion() - .first(upgradeSlots(target, activeNodes)); + .first(upgradeSlots(target, activeNodes.deprovisioning())); } /** Upgrade given host by retiring and deprovisioning it */ diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDb.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDb.java index 38df1725662..cebc185360a 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDb.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDb.java @@ -93,7 +93,6 @@ public class CuratorDb { private void initZK() { db.create(root); - db.deleteRecursively(nodesPath); // TODO(mpolden): Remove before we start reading from this path db.create(nodesPath); // TODO(mpolden): Remove state paths after migration to nodesPath for (Node.State state : Node.State.values()) diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/Fixture.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/Fixture.java index a43746db6d9..1e1e00a10db 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/Fixture.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/Fixture.java @@ -24,12 +24,10 @@ import com.yahoo.vespa.hosted.provision.applications.Cluster; import com.yahoo.vespa.hosted.provision.autoscale.awsnodes.AwsHostResourcesCalculatorImpl; import com.yahoo.vespa.hosted.provision.autoscale.awsnodes.AwsNodeTypes; import com.yahoo.vespa.hosted.provision.provisioning.HostResourcesCalculator; - import java.time.Duration; import java.util.Arrays; import java.util.List; import java.util.Optional; -import java.util.stream.Collectors; /** * Fixture for autoscaling tests. @@ -246,7 +244,7 @@ public class Fixture { public Fixture.Builder hostSharingFlag() { var resources = new HostResources(8.0, 32.0, 100.0, 10.0, "fast", "local", null, 6, "x86_64"); - flagSource.withJacksonFlag(PermanentFlags.SHARED_HOST.id(), new SharedHost(List.of(resources), null), SharedHost.class); + flagSource.withJacksonFlag(PermanentFlags.SHARED_HOST.id(), new SharedHost(List.of(resources)), SharedHost.class); return this; } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainerTest.java index 3084ce9215a..6374bf52687 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainerTest.java @@ -78,6 +78,10 @@ public class AutoscalingMaintainerTest { tester.maintainer().maintain(); assertTrue(tester.deployer().lastDeployTime(app1).isEmpty()); // since autoscaling is off assertTrue(tester.deployer().lastDeployTime(app2).isPresent()); + assertNotEquals(Load.zero(), + tester.nodeRepository().applications().require(app1).cluster(cluster1.id()).get().target().peak()); + assertNotEquals(Load.zero(), + tester.nodeRepository().applications().require(app1).cluster(cluster1.id()).get().target().ideal()); } @Test diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/os/OsVersionsTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/os/OsVersionsTest.java index 4635d3ff525..9f9e6b85545 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/os/OsVersionsTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/os/OsVersionsTest.java @@ -26,7 +26,6 @@ import java.util.List; import java.util.Optional; import java.util.function.Function; import java.util.function.Supplier; -import java.util.stream.Collectors; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -181,9 +180,16 @@ public class OsVersionsTest { versions.setTarget(NodeType.host, version1, false); versions.resumeUpgradeOf(NodeType.host, true); - // One host is deprovisioning + // First batch of hosts starts deprovisioning assertEquals(maxActiveUpgrades, hostNodes.get().deprovisioning().size()); + // Deprovisioning is rescheduled if some other agent resets wantToRetire/wantToDeprovision + Node host0 = hostNodes.get().deprovisioning().first().get(); + tester.patchNode(host0, (h) -> h.withWantToRetire(false, false, Agent.system, + tester.nodeRepository().clock().instant())); + versions.resumeUpgradeOf(NodeType.host, true); + assertTrue(hostNodes.get().deprovisioning().node(host0.hostname()).isPresent()); + // Nothing happens on next resume as first batch has not completed upgrade versions.resumeUpgradeOf(NodeType.host, true); NodeList nodesDeprovisioning = hostNodes.get().deprovisioning(); |