diff options
7 files changed, 26 insertions, 49 deletions
diff --git a/node-admin/scripts/maintenance.sh b/node-admin/scripts/maintenance.sh new file mode 100644 index 00000000000..c8532c6d268 --- /dev/null +++ b/node-admin/scripts/maintenance.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +java \ + -cp $VESPA_HOME/lib/jars/node-maintainer-jar-with-dependencies.jar \ + -Dvespa.log.target=file:$VESPA_HOME/logs/vespa/maintainer.log \ + "$@" diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java index 9e6f7a25ed8..615eddac645 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java @@ -93,14 +93,6 @@ public class DockerOperationsImpl implements DockerOperations { this.processExecuter = processExecuter; } - // Returns empty if vespa version cannot be parsed. - static Optional<String> parseVespaVersion(final String rawVespaVersion) { - if (rawVespaVersion == null) return Optional.empty(); - - final Matcher matcher = VESPA_VERSION_PATTERN.matcher(rawVespaVersion.trim()); - return matcher.find() ? Optional.of(matcher.group(1)) : Optional.empty(); - } - @Override public void startContainer(ContainerName containerName, final ContainerNodeSpec nodeSpec) { PrefixLogger logger = PrefixLogger.getNodeAgentLogger(DockerOperationsImpl.class, containerName); diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAttributes.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAttributes.java index 8ad4a8aa465..2d93dff80a4 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAttributes.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAttributes.java @@ -14,6 +14,7 @@ public class NodeAttributes { private Long rebootGeneration = null; private DockerImage dockerImage = null; private String vespaVersion = null; + private String hardwareDivergence = null; public NodeAttributes() { } @@ -37,6 +38,11 @@ public class NodeAttributes { return this; } + public NodeAttributes withHardwareDivergence(String hardwareDivergence) { + this.hardwareDivergence = hardwareDivergence; + return this; + } + public Long getRestartGeneration() { return restartGeneration; } @@ -53,9 +59,13 @@ public class NodeAttributes { return vespaVersion; } + public String getHardwareDivergence() { + return hardwareDivergence; + } + @Override public int hashCode() { - return Objects.hash(restartGeneration, rebootGeneration, dockerImage, vespaVersion); + return Objects.hash(restartGeneration, rebootGeneration, dockerImage, vespaVersion, hardwareDivergence); } @Override @@ -68,7 +78,8 @@ public class NodeAttributes { return Objects.equals(restartGeneration, other.restartGeneration) && Objects.equals(rebootGeneration, other.rebootGeneration) && Objects.equals(dockerImage, other.dockerImage) - && Objects.equals(vespaVersion, other.vespaVersion); + && Objects.equals(vespaVersion, other.vespaVersion) + && Objects.equals(hardwareDivergence, other.hardwareDivergence); } @Override @@ -78,6 +89,7 @@ public class NodeAttributes { ", rebootGeneration=" + rebootGeneration + ", dockerImage=" + dockerImage.asString() + ", vespaVersion='" + vespaVersion + '\'' + + ", hardwareDivergence='" + hardwareDivergence + '\'' + '}'; } } diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/noderepository/bindings/UpdateNodeAttributesRequestBody.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/noderepository/bindings/UpdateNodeAttributesRequestBody.java index 1e2815ccee1..7acd94a2947 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/noderepository/bindings/UpdateNodeAttributesRequestBody.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/noderepository/bindings/UpdateNodeAttributesRequestBody.java @@ -21,6 +21,7 @@ public class UpdateNodeAttributesRequestBody { public Long currentRebootGeneration; public String currentDockerImage; public String currentVespaVersion; + public String hardwareDivergence; public UpdateNodeAttributesRequestBody(NodeAttributes nodeAttributes) { if (nodeAttributes.getDockerImage() != null) { @@ -30,5 +31,6 @@ public class UpdateNodeAttributesRequestBody { this.currentRestartGeneration = nodeAttributes.getRestartGeneration(); this.currentVespaVersion = nodeAttributes.getVespaVersion(); this.currentRebootGeneration = nodeAttributes.getRebootGeneration(); + this.hardwareDivergence = nodeAttributes.getHardwareDivergence(); } } diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImplTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImplTest.java index 93f045efd9c..c0f123d7044 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImplTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImplTest.java @@ -68,41 +68,6 @@ public class DockerOperationsImplTest { } @Test - public void vespaVersionIsParsed() { - assertThat(DockerOperationsImpl.parseVespaVersion("5.119.53"), CoreMatchers.is(Optional.of("5.119.53"))); - } - - @Test - public void vespaVersionIsParsedWithSpacesAndNewlines() { - assertThat(DockerOperationsImpl.parseVespaVersion("5.119.53\n"), CoreMatchers.is(Optional.of("5.119.53"))); - assertThat(DockerOperationsImpl.parseVespaVersion(" 5.119.53 \n"), CoreMatchers.is(Optional.of("5.119.53"))); - assertThat(DockerOperationsImpl.parseVespaVersion("\n 5.119.53 \n"), CoreMatchers.is(Optional.of("5.119.53"))); - } - - @Test - public void vespaVersionIsParsedWithIrregularVersionScheme() { - assertThat(DockerOperationsImpl.parseVespaVersion("7.2"), CoreMatchers.is(Optional.of("7.2"))); - assertThat(DockerOperationsImpl.parseVespaVersion("8.0-beta"), CoreMatchers.is(Optional.of("8.0-beta"))); - assertThat(DockerOperationsImpl.parseVespaVersion("foo"), CoreMatchers.is(Optional.of("foo"))); - assertThat(DockerOperationsImpl.parseVespaVersion("119"), CoreMatchers.is(Optional.of("119"))); - } - - @Test - public void vespaVersionIsNotParsedFromNull() { - assertThat(DockerOperationsImpl.parseVespaVersion(null), CoreMatchers.is(Optional.empty())); - } - - @Test - public void vespaVersionIsNotParsedFromEmptyString() { - assertThat(DockerOperationsImpl.parseVespaVersion(""), CoreMatchers.is(Optional.empty())); - } - - @Test - public void vespaVersionIsNotParsedFromUnexpectedContent() { - assertThat(DockerOperationsImpl.parseVespaVersion("No such command 'vespanodectl'"), CoreMatchers.is(Optional.empty())); - } - - @Test public void runsCommandInNetworkNamespace() { Container container = makeContainer("container-42", Container.State.RUNNING, 42); diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/MultiDockerTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/MultiDockerTest.java index e700de5eeae..542d01655ef 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/MultiDockerTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/MultiDockerTest.java @@ -54,10 +54,10 @@ public class MultiDockerTest { "DeleteContainerStorage with ContainerName { name=host2 }"); dockerTester.callOrderVerifier.assertInOrder( - "updateNodeAttributes with HostName: host1.test.yahoo.com, NodeAttributes{restartGeneration=1, rebootGeneration=0, dockerImage=image1, vespaVersion='1.2.3'}", - "updateNodeAttributes with HostName: host2.test.yahoo.com, NodeAttributes{restartGeneration=1, rebootGeneration=0, dockerImage=image2, vespaVersion='1.2.3'}", + "updateNodeAttributes with HostName: host1.test.yahoo.com, NodeAttributes{restartGeneration=1, rebootGeneration=0, dockerImage=image1, vespaVersion='1.2.3', hardwareDivergence='null'}", + "updateNodeAttributes with HostName: host2.test.yahoo.com, NodeAttributes{restartGeneration=1, rebootGeneration=0, dockerImage=image2, vespaVersion='1.2.3', hardwareDivergence='null'}", "markNodeAvailableForNewAllocation with HostName: host2.test.yahoo.com", - "updateNodeAttributes with HostName: host3.test.yahoo.com, NodeAttributes{restartGeneration=1, rebootGeneration=0, dockerImage=image1, vespaVersion='1.2.3'}"); + "updateNodeAttributes with HostName: host3.test.yahoo.com, NodeAttributes{restartGeneration=1, rebootGeneration=0, dockerImage=image1, vespaVersion='1.2.3', hardwareDivergence='null'}"); } } diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RestartTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RestartTest.java index 00d6b78a12e..de38d7e589d 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RestartTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RestartTest.java @@ -32,7 +32,7 @@ public class RestartTest { // Check that the container is started and NodeRepo has received the PATCH update dockerTester.callOrderVerifier.assertInOrder( "createContainerCommand with DockerImage { imageId=image:1.2.3 }, HostName: host1.test.yahoo.com, ContainerName { name=host1 }", - "updateNodeAttributes with HostName: host1.test.yahoo.com, NodeAttributes{restartGeneration=1, rebootGeneration=0, dockerImage=image:1.2.3, vespaVersion='1.2.3'}"); + "updateNodeAttributes with HostName: host1.test.yahoo.com, NodeAttributes{restartGeneration=1, rebootGeneration=0, dockerImage=image:1.2.3, vespaVersion='1.2.3', hardwareDivergence='null'}"); wantedRestartGeneration = 2; currentRestartGeneration = 1; |