aboutsummaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Nodes.java9
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/OsUpgrader.java6
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/RebuildingOsUpgrader.java2
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/RetiringOsUpgrader.java2
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDb.java1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/Fixture.java4
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainerTest.java4
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/os/OsVersionsTest.java10
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();