summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2018-08-29 13:12:23 +0200
committerGitHub <noreply@github.com>2018-08-29 13:12:23 +0200
commit4b4ee6503ad05926218b9a0d01a6ac0846bdf71c (patch)
tree4b159f5e9df97d03669c0074a3ac836c9c13ac39 /node-repository
parente9aa29d6d64ef15e6416d89f1f75470b5e567876 (diff)
parent6abe06fa7850cdfdcd0b13ae8ef4fad6931877d9 (diff)
Merge pull request #6712 from vespa-engine/mpolden/clear-os-target
Allow clearing target OS version
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/DockerHostCapacity.java3
-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/main/java/com/yahoo/vespa/hosted/provision/testutils/ContainerConfig.java42
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/AclProvisioningTest.java1
-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
7 files changed, 55 insertions, 34 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/DockerHostCapacity.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/DockerHostCapacity.java
index 6dd281ce4a0..e973f3d4174 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/DockerHostCapacity.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/DockerHostCapacity.java
@@ -20,9 +20,6 @@ import java.util.Set;
*/
public class DockerHostCapacity {
- /** Tenant name for headroom nodes - only used internally */
- public static final String HEADROOM_TENANT = "-__!@#$$%THISisHEADroom";
-
/**
* An immutable list of nodes
*/
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/main/java/com/yahoo/vespa/hosted/provision/testutils/ContainerConfig.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/ContainerConfig.java
index 6c43ed18645..46c144a1758 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/ContainerConfig.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/ContainerConfig.java
@@ -10,26 +10,28 @@ package com.yahoo.vespa.hosted.provision.testutils;
public class ContainerConfig {
public static String servicesXmlV2(int port) {
- return
- "<jdisc version='1.0'>" +
- " <component id='com.yahoo.test.ManualClock'/>" +
- " <component id='com.yahoo.vespa.curator.mock.MockCurator'/>" +
- " <component id='com.yahoo.vespa.hosted.provision.testutils.OrchestratorMock'/>" +
- " <component id='com.yahoo.vespa.hosted.provision.testutils.MockDeployer'/>" +
- " <component id='com.yahoo.vespa.hosted.provision.testutils.MockProvisioner'/>" +
- " <component id='com.yahoo.vespa.hosted.provision.testutils.TestHostLivenessTracker'/>" +
- " <component id='com.yahoo.vespa.hosted.provision.testutils.ServiceMonitorStub'/>" +
- " <component id='com.yahoo.vespa.hosted.provision.testutils.MockNodeFlavors'/>" +
- " <component id='com.yahoo.vespa.hosted.provision.testutils.MockNodeRepository'/>" +
- " <component id='com.yahoo.vespa.hosted.provision.maintenance.NodeRepositoryMaintenance'/>" +
- " <component id='com.yahoo.config.provision.Zone'/>" +
- " <handler id='com.yahoo.vespa.hosted.provision.restapi.v2.NodesApiHandler'>" +
- " <binding>http://*/nodes/v2/*</binding>" +
- " </handler>" +
- " <http>" +
- " <server id='myServer' port='" + port + "' />" +
- " </http>" +
- "</jdisc>";
+ return "<jdisc version='1.0'>\n" +
+ " <config name=\"container.handler.threadpool\">\n" +
+ " <maxthreads>10</maxthreads>\n" +
+ " </config> \n" +
+ " <component id='com.yahoo.test.ManualClock'/>\n" +
+ " <component id='com.yahoo.vespa.curator.mock.MockCurator'/>\n" +
+ " <component id='com.yahoo.vespa.hosted.provision.testutils.OrchestratorMock'/>\n" +
+ " <component id='com.yahoo.vespa.hosted.provision.testutils.MockDeployer'/>\n" +
+ " <component id='com.yahoo.vespa.hosted.provision.testutils.MockProvisioner'/>\n" +
+ " <component id='com.yahoo.vespa.hosted.provision.testutils.TestHostLivenessTracker'/>\n" +
+ " <component id='com.yahoo.vespa.hosted.provision.testutils.ServiceMonitorStub'/>\n" +
+ " <component id='com.yahoo.vespa.hosted.provision.testutils.MockNodeFlavors'/>\n" +
+ " <component id='com.yahoo.vespa.hosted.provision.testutils.MockNodeRepository'/>\n" +
+ " <component id='com.yahoo.vespa.hosted.provision.maintenance.NodeRepositoryMaintenance'/>\n" +
+ " <component id='com.yahoo.config.provision.Zone'/>\n" +
+ " <handler id='com.yahoo.vespa.hosted.provision.restapi.v2.NodesApiHandler'>\n" +
+ " <binding>http://*/nodes/v2/*</binding>\n" +
+ " </handler>\n" +
+ " <http>\n" +
+ " <server id='myServer' port='" + port + "'/>\n" +
+ " </http>\n" +
+ "</jdisc>";
}
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/AclProvisioningTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/AclProvisioningTest.java
index 1924c8e7332..c5f33800283 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/AclProvisioningTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/AclProvisioningTest.java
@@ -158,7 +158,6 @@ public class AclProvisioningTest {
// Check trusted nodes for all nodes
activeDockerHostNodes.forEach(node -> {
- System.out.println("Checking node " + node);
List<NodeAcl> nodeAcls = tester.nodeRepository().getNodeAcls(node, false);
assertAcls(Arrays.asList(activeDockerHostNodes, configServers), dockerBridgeNetwork, nodeAcls);
});
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