diff options
author | Martin Polden <mpolden@mpolden.no> | 2018-08-29 13:12:23 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-08-29 13:12:23 +0200 |
commit | 4b4ee6503ad05926218b9a0d01a6ac0846bdf71c (patch) | |
tree | 4b159f5e9df97d03669c0074a3ac836c9c13ac39 /node-repository | |
parent | e9aa29d6d64ef15e6416d89f1f75470b5e567876 (diff) | |
parent | 6abe06fa7850cdfdcd0b13ae8ef4fad6931877d9 (diff) |
Merge pull request #6712 from vespa-engine/mpolden/clear-os-target
Allow clearing target OS version
Diffstat (limited to 'node-repository')
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 |