aboutsummaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorMartin Polden <martin.polden@gmail.com>2017-02-10 15:22:27 +0100
committerMartin Polden <martin.polden@gmail.com>2017-02-10 15:22:27 +0100
commit9ef34ce9a2d9c36f8ebf4f8e26b05253b006cb27 (patch)
tree733515f5e45e6f4bfe86575316c70221bf3c0948 /node-repository
parent2c811f0aed0634ffde4c6a4b66133c05f761bcc4 (diff)
Deny setting unallocated node active
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java6
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/RestApiTest.java5
2 files changed, 10 insertions, 1 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 26fadbf7e91..fb1f9edad31 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
@@ -352,8 +352,12 @@ public class NodeRepository extends AbstractComponent {
public Node move(String hostname, Node.State toState) {
Optional<Node> node = getNode(hostname);
- if ( ! node.isPresent())
+ if ( ! node.isPresent()) {
throw new NotFoundException("Could not move " + hostname + " to " + toState + ": Node not found");
+ }
+ if (toState == Node.State.active && !node.get().allocation().isPresent()) {
+ throw new IllegalArgumentException("Could not set " + hostname + " active. It has no allocation.");
+ }
try (Mutex lock = lock(node.get())) {
return zkClient.writeTo(toState, node.get());
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/RestApiTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/RestApiTest.java
index e1ab2914cff..ec63b0842dd 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/RestApiTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/RestApiTest.java
@@ -347,6 +347,11 @@ public class RestApiTest {
assertResponse(new Request("http://localhost:8080/nodes/v2/node/host4.yahoo.com",
Utf8.toBytes("{\"flavor\": 1}"), Request.Method.PATCH),
400, "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Could not set field 'flavor': Expected a STRING value, got a LONG\"}");
+
+ // Attempt to set unallocated node active
+ assertResponse(new Request("http://localhost:8080/nodes/v2/state/active/host2.yahoo.com",
+ new byte[0], Request.Method.PUT), 400,
+ "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Could not set host2.yahoo.com active. It has no allocation.\"}");
}