diff options
author | Martin Polden <martin.polden@gmail.com> | 2017-02-02 11:09:57 +0100 |
---|---|---|
committer | Martin Polden <martin.polden@gmail.com> | 2017-02-07 08:46:38 +0100 |
commit | 823b47991c20ab25b6d4576ac63519f7bf06a9fc (patch) | |
tree | e50d7142404d224ce8e7b0fab25985223ce5a577 /node-repository | |
parent | 7b9ec4a55bd8bcbaa9f1b43033ed00a8c02cd3b7 (diff) |
Allow provisioned -> dirty transistion
Diffstat (limited to 'node-repository')
-rw-r--r-- | node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java index 81b109456b8..48a95884732 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java @@ -55,7 +55,7 @@ import java.util.stream.Collectors; * @author bratseth */ // Node state transitions: -// 1) (new) - > provisioned -> ready -> reserved -> active -> inactive -> dirty -> ready +// 1) (new) - > provisioned -> dirty -> ready -> reserved -> active -> inactive -> dirty -> ready // 2) inactive -> reserved // 3) reserved -> dirty // 3) * -> failed | parked -> dirty | active | (removed) @@ -305,16 +305,18 @@ public class NodeRepository extends AbstractComponent { } /** - * Set a node dirty, which is in the failed or parked state. + * Set a node dirty, which is in the provisioned, failed or parked state. + * Use this to clean newly provisioned nodes or to recycle failed nodes which have been repaired or put on hold. * * @throws IllegalArgumentException if the node has hardware failure */ public Node setDirty(String hostname) { - if ( ! nodeToDeallocate.isPresent()) - throw new IllegalArgumentException("Could not deallocate " + hostname + ": No such node in the failed or parked state"); - if (nodeToDeallocate.get().status().hardwareFailure().isPresent()) + Optional<Node> nodeToDirty = getNode(hostname, Node.State.provisioned, Node.State.failed, Node.State.parked); + if ( ! nodeToDirty.isPresent()) + throw new IllegalArgumentException("Could not deallocate " + hostname + ": No such node in the provisioned, failed or parked state"); + if (nodeToDirty.get().status().hardwareFailure().isPresent()) throw new IllegalArgumentException("Could not deallocate " + hostname + ": It has a hardware failure"); - return setDirty(Collections.singletonList(nodeToDeallocate.get())).get(0); + return setDirty(Collections.singletonList(nodeToDirty.get())).get(0); } /** |