diff options
author | Valerij Fredriksen <valerijf@oath.com> | 2017-12-01 10:02:03 +0100 |
---|---|---|
committer | Valerij Fredriksen <valerijf@oath.com> | 2017-12-01 10:02:03 +0100 |
commit | 0154830dbe7b02b595ca3ecb9c390038e6e2a6a4 (patch) | |
tree | 8c8e5d4ffff8a08587538f3d54f0c2941ffe37b1 /node-repository | |
parent | 2fa6726460c8a235e69d90737618589c0381e8cf (diff) |
Reset wantTo* fields with transitioning to ready
Diffstat (limited to 'node-repository')
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", |