summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2022-04-06 16:27:35 +0200
committerMartin Polden <mpolden@mpolden.no>2022-04-06 16:27:35 +0200
commit361679b0c48d3e7ab8d7a9f761a2ab05748cf28a (patch)
tree4252f979d9e7010e1d6a9ebd2058c113a17954bc /node-repository
parent4dbf00faa83362bfe0f25ef1f2d689a4d58b05ab (diff)
Disallow unparking a deprovisioning host
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Nodes.java6
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainerTest.java7
2 files changed, 12 insertions, 1 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 cb82585fe01..fc0da672e6f 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
@@ -322,7 +322,11 @@ public class Nodes {
if (parkOnDeallocationOf(node, agent)) {
return park(node.hostname(), false, agent, reason, transaction);
} else {
- return db.writeTo(Node.State.dirty, List.of(node), agent, Optional.of(reason), transaction).get(0);
+ Node.State toState = Node.State.dirty;
+ if (node.state() == Node.State.parked && node.status().wantToDeprovision()) {
+ throw new IllegalArgumentException("Cannot move " + node + " to " + toState + ": It's being deprovisioned");
+ }
+ return db.writeTo(toState, List.of(node), agent, Optional.of(reason), transaction).get(0);
}
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainerTest.java
index 68d75db8a4c..64cee87d942 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainerTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainerTest.java
@@ -53,6 +53,7 @@ import static com.yahoo.vespa.hosted.provision.testutils.MockHostProvisioner.Beh
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
/**
* @author freva
@@ -496,6 +497,12 @@ public class DynamicProvisioningMaintainerTest {
tester.nodeRepository().nodes().deallocate(hostToRemove.get(), Agent.system, getClass().getSimpleName());
assertSame("Host moves to parked", Node.State.parked, hostToRemove.get().state());
+ // deprovisioning host cannot be unparked
+ try {
+ tester.nodeRepository().nodes().deallocate(hostToRemove.get(), Agent.operator, getClass().getSimpleName());
+ fail("Expected exception");
+ } catch (IllegalArgumentException ignored) {}
+
// Host and child is removed
dynamicProvisioningTester.maintainer.maintain();
allNodes = tester.nodeRepository().nodes().list();