summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2018-08-29 09:27:42 +0200
committerMartin Polden <mpolden@mpolden.no>2018-08-29 09:27:42 +0200
commit6abe06fa7850cdfdcd0b13ae8ef4fad6931877d9 (patch)
tree97d7cec347385fe572b1c7362e8cc206e11410f8
parent08e6fc34832d09d35b9c8ed284175c8a4e45476d (diff)
Allow clearing target OS version
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/OsVersions.java12
-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/provisioning/OsVersionsTest.java5
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/RestApiTest.java14
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