diff options
author | Martin Polden <mpolden@mpolden.no> | 2018-08-29 09:27:42 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2018-08-29 09:27:42 +0200 |
commit | 6abe06fa7850cdfdcd0b13ae8ef4fad6931877d9 (patch) | |
tree | 97d7cec347385fe572b1c7362e8cc206e11410f8 /node-repository | |
parent | 08e6fc34832d09d35b9c8ed284175c8a4e45476d (diff) |
Allow clearing target OS version
Diffstat (limited to 'node-repository')
4 files changed, 33 insertions, 10 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/OsVersions.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/OsVersions.java index 78783f9c76a..03da60bd31c 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/OsVersions.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/OsVersions.java @@ -62,6 +62,18 @@ public class OsVersions { return Optional.ofNullable(targets().get(type)); } + /** Remove OS target for given node type. Nodes of this type will stop receiving wanted OS version in their + * node object */ + public void removeTarget(NodeType nodeType) { + try (Lock lock = db.lockOsVersions()) { + Map<NodeType, Version> osVersions = db.readOsVersions(); + osVersions.remove(nodeType); + db.writeOsVersions(osVersions); + createCache(); // Throw away current cache + log.info("Cleared OS target version for " + nodeType); + } + } + /** Set the target OS version for nodes of given type */ public void setTarget(NodeType nodeType, Version newTarget, boolean force) { if (!nodeType.isDockerHost()) { 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 c282993a466..24e9682b01c 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 @@ -298,9 +298,15 @@ public class NodesApiHandler extends LoggingRequestHandler { } if (osVersionField.valid()) { - Version osVersion = Version.fromString(osVersionField.asString()); - nodeRepository.osVersions().setTarget(nodeType, osVersion, force); - messageParts.add("osVersion to " + osVersion.toFullString()); + String v = osVersionField.asString(); + if (v.isEmpty()) { + nodeRepository.osVersions().removeTarget(nodeType); + messageParts.add("osVersion to null"); + } else { + Version osVersion = Version.fromString(v); + nodeRepository.osVersions().setTarget(nodeType, osVersion, force); + messageParts.add("osVersion to " + osVersion.toFullString()); + } } if (messageParts.isEmpty()) { diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/OsVersionsTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/OsVersionsTest.java index 88f5dcb9854..36c9591f85a 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/OsVersionsTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/OsVersionsTest.java @@ -11,6 +11,7 @@ import java.time.Duration; import java.util.Map; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotSame; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; @@ -58,6 +59,10 @@ public class OsVersionsTest { // Forcing downgrade succeeds versions.setTarget(NodeType.host, version1, true); assertEquals(version1, versions.targetFor(NodeType.host).get()); + + // Target can be removed + versions.removeTarget(NodeType.host); + assertFalse(versions.targetFor(NodeType.host).isPresent()); } } 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 83d3acdd178..a838d5c7b64 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 @@ -581,13 +581,6 @@ public class RestApiTest { 400, "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Setting target OS version for config nodes is unsupported\"}"); - // Setting empty osVersion fails - assertResponse(new Request("http://localhost:8080/nodes/v2/upgrade/confighost", - Utf8.toBytes("{\"osVersion\": null}"), - Request.Method.PATCH), - 400, - "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Invalid target version: 0.0.0\"}"); - // Attempt to downgrade OS assertResponse(new Request("http://localhost:8080/nodes/v2/upgrade/confighost", Utf8.toBytes("{\"osVersion\": \"7.4.2\"}"), @@ -600,6 +593,13 @@ public class RestApiTest { Utf8.toBytes("{\"osVersion\": \"7.4.2\", \"force\": true}"), Request.Method.PATCH), "{\"message\":\"Set osVersion to 7.4.2 for nodes of type confighost\"}"); + + // Current target is considered bad, remove it + assertResponse(new Request("http://localhost:8080/nodes/v2/upgrade/confighost", + Utf8.toBytes("{\"osVersion\": null}"), + Request.Method.PATCH), + 200, + "{\"message\":\"Set osVersion to null for nodes of type confighost\"}"); } @Test |