summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authortoby <smorgrav@yahoo-inc.com>2017-05-23 14:14:45 +0200
committertoby <smorgrav@yahoo-inc.com>2017-05-23 14:14:45 +0200
commitf360748e2579d31667f5dbc342275866953b699d (patch)
tree7db36a9f427f0e40f7b1d6ebbe14877727b43cf8 /node-repository
parent767d21202ed98f1b0103dfc109554d6a0a1e1bff (diff)
Add more tests to nodeadmin -> marknodeasavailable usage
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesApiHandler.java12
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTest.java17
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTester.java1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/RestApiTest.java5
4 files changed, 31 insertions, 4 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesApiHandler.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesApiHandler.java
index 5194614c9b3..45d0890d8cb 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesApiHandler.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesApiHandler.java
@@ -129,13 +129,17 @@ public class NodesApiHandler extends LoggingRequestHandler {
* This is a temporary "state" or rest call that we use to enable a smooth rollout of
* dynamic docker flavor allocations. Once we have switch everything we remove this
* and change the code in the nodeadmin to delete directly.
+ *
+ * Should only be called by node-admin for docker containers (the docker constraint is
+ * enforced in the remove method)
*/
+ String hostname = lastElement(path);
if (nodeRepository.dynamicAllocationEnabled()) {
- nodeRepository.remove(lastElement(path));
- return new MessageResponse("Removed " + lastElement(path));
+ nodeRepository.remove(hostname);
+ return new MessageResponse("Removed " + hostname);
} else {
- nodeRepository.setReady(lastElement(path));
- return new MessageResponse("Moved " + lastElement(path) + " to ready");
+ nodeRepository.setReady(hostname);
+ return new MessageResponse("Moved " + hostname + " to ready");
}
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTest.java
index 40ba82be67e..46fa5c3ce98 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTest.java
@@ -66,4 +66,21 @@ public class NodeRepositoryTest {
tester.curator().set(Path.fromString("/provision/v1/dynamicDockerAllocation"), new byte[0]);
assertTrue(tester.nodeRepository().dynamicAllocationEnabled());
}
+
+ @Test
+ public void only_allow_to_delete_dirty_nodes_when_dynamic_allocation_feature_enabled() {
+ NodeRepositoryTester tester = new NodeRepositoryTester();
+ try {
+ tester.addNode("id1", "host1", "default", NodeType.host);
+ tester.addNode("id2", "host2", "docker", NodeType.tenant);
+ tester.nodeRepository().setDirty("host2");
+
+ assertFalse(tester.nodeRepository().remove("host2"));
+
+ tester.curator().set(Path.fromString("/provision/v1/dynamicDockerAllocation"), new byte[0]);
+ assertTrue(tester.nodeRepository().remove("host2"));
+ } finally {
+ tester.curator().delete(Path.fromString("/provision/v1/dynamicDockerAllocation"));
+ }
+ }
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTester.java
index ed6da7f82af..3c25729f1b8 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTester.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTester.java
@@ -52,6 +52,7 @@ public class NodeRepositoryTester {
FlavorConfigBuilder b = new FlavorConfigBuilder();
b.addFlavor("default", 2., 4., 100, Flavor.Type.BARE_METAL).cost(3);
b.addFlavor("small", 1., 2., 50, Flavor.Type.BARE_METAL).cost(2);
+ b.addFlavor("docker", 1., 2., 50, Flavor.Type.DOCKER_CONTAINER).cost(1);
return b.build();
}
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 bad123aff82..0285138c9c2 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
@@ -149,6 +149,11 @@ public class RestApiTest {
new byte[0], Request.Method.PUT),
"{\"message\":\"Moved host6.yahoo.com to dirty\"}");
+ // ... and set it back to ready as if this was from the node-admin with the temporary state rest api
+ assertResponse(new Request("http://localhost:8080/nodes/v2/state/availablefornewallocations/host6.yahoo.com",
+ new byte[0], Request.Method.PUT),
+ "{\"message\":\"Moved host6.yahoo.com to ready\"}");
+
// Put a host in failed and make sure it's children are also failed
assertResponse(new Request("http://localhost:8080/nodes/v2/state/failed/parent1.yahoo.com", new byte[0], Request.Method.PUT),
"{\"message\":\"Moved host10.yahoo.com, host5.yahoo.com, parent1.yahoo.com to failed\"}");