summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorValerij Fredriksen <valerijf@oath.com>2017-12-01 10:02:03 +0100
committerValerij Fredriksen <valerijf@oath.com>2017-12-01 10:02:03 +0100
commit0154830dbe7b02b595ca3ecb9c390038e6e2a6a4 (patch)
tree8c8e5d4ffff8a08587538f3d54f0c2941ffe37b1 /node-repository
parent2fa6726460c8a235e69d90737618589c0381e8cf (diff)
Reset wantTo* fields with transitioning to ready
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java13
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java5
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/RestApiTest.java9
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node55-after-changes.json39
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node55.json4
5 files changed, 62 insertions, 8 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 88daa34d8ca..9b05478eb07 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
@@ -307,11 +307,16 @@ public class NodeRepository extends AbstractComponent {
/** Sets a list of nodes ready and returns the nodes in the ready state */
public List<Node> setReady(List<Node> nodes) {
- for (Node node : nodes)
- if (node.state() != Node.State.dirty)
- throw new IllegalArgumentException("Can not set " + node + " ready. It is not dirty.");
try (Mutex lock = lockUnallocated()) {
- return db.writeTo(Node.State.ready, nodes, Agent.system, Optional.empty());
+ List<Node> nodesWithResetFields = nodes.stream()
+ .map(node -> {
+ if (node.state() != Node.State.dirty)
+ throw new IllegalArgumentException("Can not set " + node + " ready. It is not dirty.");
+ return node.with(node.status().withWantToRetire(false).withWantToDeprovision(false));
+ })
+ .collect(Collectors.toList());
+
+ return db.writeTo(Node.State.ready, nodesWithResetFields, Agent.system, Optional.empty());
}
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java
index 7de138fa954..928d8082c6b 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java
@@ -95,9 +95,10 @@ public class MockNodeRepository extends NodeRepository {
node10 = node10.with(node10newStatus);
nodes.add(node10);
- nodes.add(createNode("node55", "host55.yahoo.com", ipAddresses, Optional.empty(), flavors.getFlavorOrThrow("default"), NodeType.tenant));
+ Node node55 = createNode("node55", "host55.yahoo.com", ipAddresses, Optional.empty(), flavors.getFlavorOrThrow("default"), NodeType.tenant);
+ nodes.add(node55.with(node55.status().withWantToRetire(true).withWantToDeprovision(true)));
- /** Setup docker hosts (two of these will be reserved for spares */
+ /* Setup docker hosts (two of these will be reserved for spares */
nodes.add(createNode("dockerhost1", "dockerhost1.yahoo.com", ipAddresses, additionalIpAddresses, Optional.empty(), flavors.getFlavorOrThrow("large"), NodeType.host));
nodes.add(createNode("dockerhost2", "dockerhost2.yahoo.com", ipAddresses, additionalIpAddresses, Optional.empty(), flavors.getFlavorOrThrow("large"), NodeType.host));
nodes.add(createNode("dockerhost3", "dockerhost3.yahoo.com", ipAddresses, additionalIpAddresses, Optional.empty(), flavors.getFlavorOrThrow("large"), NodeType.host));
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 54e0c59ff00..2739b4d1cf8 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
@@ -308,6 +308,15 @@ public class RestApiTest {
}
@Test
+ public void setting_node_to_ready_will_reset_certain_fields() throws Exception {
+ final String hostname = "host55.yahoo.com";
+ assertResponse(new Request("http://localhost:8080/nodes/v2/state/ready/" + hostname,
+ new byte[0], Request.Method.PUT),
+ "{\"message\":\"Moved " + hostname + " to ready\"}");
+ assertFile(new Request("http://localhost:8080/nodes/v2/node/" + hostname), "node55-after-changes.json");
+ }
+
+ @Test
public void acl_request_by_tenant_node() throws Exception {
String hostname = "foo.yahoo.com";
assertResponse(new Request("http://localhost:8080/nodes/v2/node",
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node55-after-changes.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node55-after-changes.json
new file mode 100644
index 00000000000..4560e5e1be4
--- /dev/null
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node55-after-changes.json
@@ -0,0 +1,39 @@
+{
+ "url": "http://localhost:8080/nodes/v2/node/host55.yahoo.com",
+ "id": "host55.yahoo.com",
+ "state": "ready",
+ "type": "tenant",
+ "hostname": "host55.yahoo.com",
+ "openStackId": "node55",
+ "flavor": "default",
+ "canonicalFlavor": "default",
+ "minDiskAvailableGb": 400.0,
+ "minMainMemoryAvailableGb": 16.0,
+ "description": "Flavor-name-is-default",
+ "minCpuCores": 2.0,
+ "fastDisk": true,
+ "environment": "BARE_METAL",
+ "rebootGeneration": 1,
+ "currentRebootGeneration": 0,
+ "failCount": 0,
+ "hardwareFailure": false,
+ "wantToRetire": false,
+ "wantToDeprovision": false,
+ "history": [
+ {
+ "event": "provisioned",
+ "at": 123,
+ "agent": "system"
+ },
+ {
+ "event": "readied",
+ "at": 123,
+ "agent": "system"
+ }
+ ],
+ "ipAddresses": [
+ "::1",
+ "127.0.0.1"
+ ],
+ "additionalIpAddresses": []
+}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node55.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node55.json
index 7d07037d076..4f8b988ccbf 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node55.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node55.json
@@ -17,8 +17,8 @@
"currentRebootGeneration": 0,
"failCount": 0,
"hardwareFailure": false,
- "wantToRetire": false,
- "wantToDeprovision": false,
+ "wantToRetire": true,
+ "wantToDeprovision": true,
"history": [
{
"event": "provisioned",