diff options
author | Martin Polden <mpolden@mpolden.no> | 2022-04-06 16:27:35 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2022-04-06 16:27:35 +0200 |
commit | 361679b0c48d3e7ab8d7a9f761a2ab05748cf28a (patch) | |
tree | 4252f979d9e7010e1d6a9ebd2058c113a17954bc /node-repository | |
parent | 4dbf00faa83362bfe0f25ef1f2d689a4d58b05ab (diff) |
Disallow unparking a deprovisioning host
Diffstat (limited to 'node-repository')
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(); |