summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorMartin Polden <martin.polden@gmail.com>2017-02-02 11:09:57 +0100
committerMartin Polden <martin.polden@gmail.com>2017-02-07 08:46:38 +0100
commit823b47991c20ab25b6d4576ac63519f7bf06a9fc (patch)
treee50d7142404d224ce8e7b0fab25985223ce5a577 /node-repository
parent7b9ec4a55bd8bcbaa9f1b43033ed00a8c02cd3b7 (diff)
Allow provisioned -> dirty transistion
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java14
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);
}
/**