summaryrefslogtreecommitdiffstats
path: root/node-admin
diff options
context:
space:
mode:
authorfreva <valerijf@yahoo-inc.com>2016-12-07 14:35:19 +0100
committerfreva <valerijf@yahoo-inc.com>2016-12-07 14:35:19 +0100
commitabe551e03061178442af6393759f3fa477bcdfd5 (patch)
tree472af0d445f1b52c8afad14c706ff926662559c6 /node-admin
parentd4ad1db47dc5cd341532f48fac5b0b4ea02002b2 (diff)
Removed Optional arguments from ContainerNodeSpec.Builder methods
Diffstat (limited to 'node-admin')
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/ContainerNodeSpec.java66
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java12
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerFailTest.java10
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerTester.java30
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/MultiDockerTest.java30
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/NodeRepoMock.java18
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/NodeStateTest.java57
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RebootTest.java8
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RestartTest.java7
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/ResumeTest.java6
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RunInContainerTest.java6
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImplTest.java8
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java90
13 files changed, 148 insertions, 200 deletions
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/ContainerNodeSpec.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/ContainerNodeSpec.java
index 43df59c65eb..4fe85b7ab80 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/ContainerNodeSpec.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/ContainerNodeSpec.java
@@ -250,13 +250,35 @@ public class ContainerNodeSpec {
private Optional<Double> minMainMemoryAvailableGb = Optional.of(1d);
private Optional<Double> minDiskAvailableGb = Optional.of(1d);
+ public Builder() {}
+
+ public Builder(ContainerNodeSpec nodeSpec) {
+ hostname(nodeSpec.hostname);
+ containerName(nodeSpec.containerName);
+ nodeState(nodeSpec.nodeState);
+ nodeType(nodeSpec.nodeType);
+ nodeFlavor(nodeSpec.nodeFlavor);
+
+ nodeSpec.wantedDockerImage.ifPresent(this::wantedDockerImage);
+ nodeSpec.vespaVersion.ifPresent(this::vespaVersion);
+ nodeSpec.owner.ifPresent(this::owner);
+ nodeSpec.membership.ifPresent(this::membership);
+ nodeSpec.wantedRestartGeneration.ifPresent(this::wantedRestartGeneration);
+ nodeSpec.currentRestartGeneration.ifPresent(this::currentRestartGeneration);
+ nodeSpec.wantedRebootGeneration.ifPresent(this::wantedRebootGeneration);
+ nodeSpec.currentRebootGeneration.ifPresent(this::currentRebootGeneration);
+ nodeSpec.minCpuCores.ifPresent(this::minCpuCores);
+ nodeSpec.minMainMemoryAvailableGb.ifPresent(this::minMainMemoryAvailableGb);
+ nodeSpec.minDiskAvailableGb.ifPresent(this::minDiskAvailableGb);
+ }
+
public Builder hostname(String hostname) {
this.hostname = hostname;
return this;
}
- public Builder wantedDockerImage(Optional<DockerImage> wantedDockerImage) {
- this.wantedDockerImage = wantedDockerImage;
+ public Builder wantedDockerImage(DockerImage wantedDockerImage) {
+ this.wantedDockerImage = Optional.of(wantedDockerImage);
return this;
}
@@ -279,53 +301,53 @@ public class ContainerNodeSpec {
return this;
}
- public Builder vespaVersion(Optional<String> vespaVersion) {
- this.vespaVersion = vespaVersion;
+ public Builder vespaVersion(String vespaVersion) {
+ this.vespaVersion = Optional.of(vespaVersion);
return this;
}
- public Builder owner(Optional<Owner> owner) {
- this.owner = owner;
+ public Builder owner(Owner owner) {
+ this.owner = Optional.of(owner);
return this;
}
- public Builder membership(Optional<Membership> membership) {
- this.membership = membership;
+ public Builder membership(Membership membership) {
+ this.membership = Optional.of(membership);
return this;
}
- public Builder wantedRestartGeneration(Optional<Long> wantedRestartGeneration) {
- this.wantedRestartGeneration = wantedRestartGeneration;
+ public Builder wantedRestartGeneration(long wantedRestartGeneration) {
+ this.wantedRestartGeneration = Optional.of(wantedRestartGeneration);
return this;
}
- public Builder currentRestartGeneration(Optional<Long> currentRestartGeneration) {
- this.currentRestartGeneration = currentRestartGeneration;
+ public Builder currentRestartGeneration(long currentRestartGeneration) {
+ this.currentRestartGeneration = Optional.of(currentRestartGeneration);
return this;
}
- public Builder wantedRebootGeneration(Optional<Long> wantedRebootGeneration) {
- this.wantedRebootGeneration = wantedRebootGeneration;
+ public Builder wantedRebootGeneration(long wantedRebootGeneration) {
+ this.wantedRebootGeneration = Optional.of(wantedRebootGeneration);
return this;
}
- public Builder currentRebootGeneration(Optional<Long> currentRebootGeneration) {
- this.currentRebootGeneration = currentRebootGeneration;
+ public Builder currentRebootGeneration(long currentRebootGeneration) {
+ this.currentRebootGeneration = Optional.of(currentRebootGeneration);
return this;
}
- public Builder minCpuCores(Optional<Double> minCpuCores) {
- this.minCpuCores = minCpuCores;
+ public Builder minCpuCores(double minCpuCores) {
+ this.minCpuCores = Optional.of(minCpuCores);
return this;
}
- public Builder minMainMemoryAvailableGb(Optional<Double> minMainMemoryAvailableGb) {
- this.minMainMemoryAvailableGb = minMainMemoryAvailableGb;
+ public Builder minMainMemoryAvailableGb(double minMainMemoryAvailableGb) {
+ this.minMainMemoryAvailableGb = Optional.of(minMainMemoryAvailableGb);
return this;
}
- public Builder minDiskAvailableGb(Optional<Double> minDiskAvailableGb) {
- this.minDiskAvailableGb = minDiskAvailableGb;
+ public Builder minDiskAvailableGb(double minDiskAvailableGb) {
+ this.minDiskAvailableGb = Optional.of(minDiskAvailableGb);
return this;
}
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java
index 18307c6d8ff..1dae658c09f 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java
@@ -295,30 +295,30 @@ public class NodeAgentImpl implements NodeAgent {
dockerOperations.stopServicesOnNode(containerName);
}
- private Optional<String> shouldRemoveContainer(ContainerNodeSpec nodeSpec, Optional<Container> existingContainer) {
+ private Optional<String> shouldRemoveContainer(ContainerNodeSpec nodeSpec, Container existingContainer) {
final Node.State nodeState = nodeSpec.nodeState;
if (nodeState == Node.State.dirty || nodeState == Node.State.provisioned) {
return Optional.of("Node in state " + nodeState + ", container should no longer be running");
}
- if (nodeSpec.wantedDockerImage.isPresent() && !nodeSpec.wantedDockerImage.get().equals(existingContainer.get().image)) {
+ if (nodeSpec.wantedDockerImage.isPresent() && !nodeSpec.wantedDockerImage.get().equals(existingContainer.image)) {
return Optional.of("The node is supposed to run a new Docker image: "
- + existingContainer.get() + " -> " + nodeSpec.wantedDockerImage.get());
+ + existingContainer + " -> " + nodeSpec.wantedDockerImage.get());
}
- if (!existingContainer.get().isRunning) {
+ if (!existingContainer.isRunning) {
return Optional.of("Container no longer running");
}
return Optional.empty();
}
// Returns true if container is absent on return
- public boolean removeContainerIfNeeded(ContainerNodeSpec nodeSpec, String hostname, Orchestrator orchestrator)
+ private boolean removeContainerIfNeeded(ContainerNodeSpec nodeSpec, String hostname, Orchestrator orchestrator)
throws Exception {
Optional<Container> existingContainer = dockerOperations.getContainer(hostname);
if (!existingContainer.isPresent()) {
return true;
}
- Optional<String> removeReason = shouldRemoveContainer(nodeSpec, existingContainer);
+ Optional<String> removeReason = shouldRemoveContainer(nodeSpec, existingContainer.get());
if (removeReason.isPresent()) {
logger.info("Will remove container " + existingContainer.get() + ": " + removeReason.get());
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerFailTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerFailTest.java
index 9d76cbb99c2..442c51270f6 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerFailTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerFailTest.java
@@ -8,10 +8,8 @@ import com.yahoo.vespa.hosted.node.admin.docker.DockerOperationsImpl;
import com.yahoo.vespa.hosted.provision.Node;
import org.junit.Test;
-import java.util.Optional;
-
/**
- * @author valerijf
+ * @author freva
*/
public class DockerFailTest {
@@ -20,13 +18,13 @@ public class DockerFailTest {
try (DockerTester dockerTester = new DockerTester()) {
ContainerNodeSpec containerNodeSpec = new ContainerNodeSpec.Builder()
.hostname("hostName")
- .wantedDockerImage(Optional.of(new DockerImage("dockerImage")))
+ .wantedDockerImage(new DockerImage("dockerImage"))
.containerName(new ContainerName("container"))
.nodeState(Node.State.active)
.nodeType("tenant")
.nodeFlavor("docker")
- .wantedRestartGeneration(Optional.of(1L))
- .currentRestartGeneration(Optional.of(1L))
+ .wantedRestartGeneration(1L)
+ .currentRestartGeneration(1L)
.build();
dockerTester.addContainerNodeSpec(containerNodeSpec);
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerTester.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerTester.java
index 59dac2c17fa..d8ad8898c9e 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerTester.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerTester.java
@@ -3,7 +3,6 @@ package com.yahoo.vespa.hosted.node.admin.integrationTests;
import com.yahoo.metrics.simple.MetricReceiver;
import com.yahoo.vespa.hosted.dockerapi.ContainerName;
import com.yahoo.vespa.hosted.dockerapi.Docker;
-import com.yahoo.vespa.hosted.dockerapi.DockerImage;
import com.yahoo.vespa.hosted.dockerapi.metrics.MetricReceiverWrapper;
import com.yahoo.vespa.hosted.node.admin.ContainerNodeSpec;
import com.yahoo.vespa.hosted.node.admin.docker.DockerOperations;
@@ -16,7 +15,6 @@ import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentImpl;
import com.yahoo.vespa.hosted.node.admin.util.Environment;
import com.yahoo.vespa.hosted.node.admin.util.InetAddressResolver;
import com.yahoo.vespa.hosted.node.maintenance.Maintainer;
-import com.yahoo.vespa.hosted.provision.Node;
import java.io.IOException;
import java.net.InetAddress;
@@ -84,34 +82,6 @@ public class DockerTester implements AutoCloseable {
return nodeRepositoryMock.getNumberOfContainerSpecs();
}
- public void updateContainerNodeSpec(final String hostname,
- final Optional<DockerImage> wantedDockerImage,
- final ContainerName containerName,
- final Node.State nodeState,
- final String nodeType,
- final String nodeFlavor,
- final Optional<Long> wantedRestartGeneration,
- final Optional<Long> currentRestartGeneration,
- final Optional<Double> minCpuCores,
- final Optional<Double> minMainMemoryAvailableGb,
- final Optional<Double> minDiskAvailableGb) {
-
- nodeRepositoryMock.updateContainerNodeSpec(
- new ContainerNodeSpec.Builder()
- .hostname(hostname)
- .wantedDockerImage(wantedDockerImage)
- .containerName(containerName)
- .nodeState(nodeState)
- .nodeType(nodeType)
- .nodeFlavor(nodeFlavor)
- .wantedRestartGeneration(wantedRestartGeneration)
- .currentRestartGeneration(currentRestartGeneration)
- .minCpuCores(minCpuCores)
- .minMainMemoryAvailableGb(minMainMemoryAvailableGb)
- .minDiskAvailableGb(minDiskAvailableGb)
- .build());
- }
-
public void updateContainerNodeSpec(ContainerNodeSpec containerNodeSpec) {
nodeRepositoryMock.updateContainerNodeSpec(containerNodeSpec);
}
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 99162ed5f0e..05aad9c81f0 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
@@ -12,29 +12,21 @@ import java.io.IOException;
import java.util.Optional;
/**
- * @author valerijf
+ * @author freva
*/
public class MultiDockerTest {
@Test
public void test() throws InterruptedException, IOException {
try (DockerTester dockerTester = new DockerTester()) {
- addAndWaitForNode(dockerTester, "host1", new ContainerName("container1"), Optional.of(new DockerImage("image1")));
+ addAndWaitForNode(dockerTester, "host1", new ContainerName("container1"), new DockerImage("image1"));
ContainerNodeSpec containerNodeSpec2 =
- addAndWaitForNode(dockerTester, "host2", new ContainerName("container2"), Optional.of(new DockerImage("image2")));
+ addAndWaitForNode(dockerTester, "host2", new ContainerName("container2"), new DockerImage("image2"));
dockerTester.updateContainerNodeSpec(
- containerNodeSpec2.hostname,
- containerNodeSpec2.wantedDockerImage,
- containerNodeSpec2.containerName,
- Node.State.dirty,
- containerNodeSpec2.nodeType,
- containerNodeSpec2.nodeFlavor,
- containerNodeSpec2.wantedRestartGeneration,
- containerNodeSpec2.currentRestartGeneration,
- containerNodeSpec2.minCpuCores,
- containerNodeSpec2.minMainMemoryAvailableGb,
- containerNodeSpec2.minDiskAvailableGb);
+ new ContainerNodeSpec.Builder(containerNodeSpec2)
+ .nodeState(Node.State.dirty)
+ .build());
// Wait until it is marked ready
Optional<ContainerNodeSpec> tempContainerNodeSpec;
@@ -43,7 +35,7 @@ public class MultiDockerTest {
Thread.sleep(10);
}
- addAndWaitForNode(dockerTester, "host3", new ContainerName("container3"), Optional.of(new DockerImage("image1")));
+ addAndWaitForNode(dockerTester, "host3", new ContainerName("container3"), new DockerImage("image1"));
CallOrderVerifier callOrderVerifier = dockerTester.getCallOrderVerifier();
callOrderVerifier.assertInOrder(
@@ -74,7 +66,7 @@ public class MultiDockerTest {
}
}
- private ContainerNodeSpec addAndWaitForNode(DockerTester tester, String hostName, ContainerName containerName, Optional<DockerImage> dockerImage) throws InterruptedException {
+ private ContainerNodeSpec addAndWaitForNode(DockerTester tester, String hostName, ContainerName containerName, DockerImage dockerImage) throws InterruptedException {
ContainerNodeSpec containerNodeSpec = new ContainerNodeSpec.Builder()
.hostname(hostName)
.wantedDockerImage(dockerImage)
@@ -82,8 +74,8 @@ public class MultiDockerTest {
.nodeState(Node.State.active)
.nodeType("tenant")
.nodeFlavor("docker")
- .wantedRestartGeneration(Optional.of(1L))
- .currentRestartGeneration(Optional.of(1L))
+ .wantedRestartGeneration(1L)
+ .currentRestartGeneration(1L)
.build();
tester.addContainerNodeSpec(containerNodeSpec);
@@ -94,7 +86,7 @@ public class MultiDockerTest {
}
tester.getCallOrderVerifier().assertInOrder(
- "createContainerCommand with DockerImage: " + dockerImage.get() + ", HostName: " + hostName + ", ContainerName: " + containerName,
+ "createContainerCommand with DockerImage: " + dockerImage + ", HostName: " + hostName + ", ContainerName: " + containerName,
"executeInContainer with ContainerName: " + containerName + ", args: [/usr/bin/env, test, -x, " + DockerOperationsImpl.NODE_PROGRAM + "]",
"executeInContainer with ContainerName: " + containerName + ", args: [" + DockerOperationsImpl.NODE_PROGRAM + ", resume]");
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/NodeRepoMock.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/NodeRepoMock.java
index b8c350ac62c..64f84e36351 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/NodeRepoMock.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/NodeRepoMock.java
@@ -56,19 +56,11 @@ public class NodeRepoMock implements NodeRepository {
synchronized (monitor) {
if (cns.isPresent()) {
- updateContainerNodeSpec(new ContainerNodeSpec.Builder()
- .hostname(cns.get().hostname)
- .wantedDockerImage(cns.get().wantedDockerImage)
- .containerName(cns.get().containerName)
- .nodeState(Node.State.ready)
- .nodeType("tenant")
- .nodeFlavor("docker")
- .wantedRestartGeneration(cns.get().wantedRestartGeneration)
- .currentRestartGeneration(cns.get().currentRestartGeneration)
- .minCpuCores(cns.get().minCpuCores)
- .minMainMemoryAvailableGb(cns.get().minMainMemoryAvailableGb)
- .minDiskAvailableGb(cns.get().minDiskAvailableGb)
- .build());
+ updateContainerNodeSpec(new ContainerNodeSpec.Builder(cns.get())
+ .nodeState(Node.State.ready)
+ .nodeType("tenant")
+ .nodeFlavor("docker")
+ .build());
}
callOrderVerifier.add("markAsReady with HostName: " + hostName);
}
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/NodeStateTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/NodeStateTest.java
index 494831b35ee..999f093311e 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/NodeStateTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/NodeStateTest.java
@@ -17,18 +17,18 @@ import static org.junit.Assert.assertThat;
/**
* Test NodeState transitions in NodeRepository
*
- * @author valerijf
+ * @author freva
*/
public class NodeStateTest {
private static ContainerNodeSpec initialContainerNodeSpec = new ContainerNodeSpec.Builder()
.hostname("host1")
- .wantedDockerImage(Optional.of(new DockerImage("dockerImage")))
+ .wantedDockerImage(new DockerImage("dockerImage"))
.containerName(new ContainerName("container"))
.nodeState(Node.State.active)
.nodeType("tenant")
.nodeFlavor("docker")
- .wantedRestartGeneration(Optional.of(1L))
- .currentRestartGeneration(Optional.of(1L))
+ .wantedRestartGeneration(1L)
+ .currentRestartGeneration(1L)
.build();
private void setup(DockerTester tester) throws InterruptedException {
@@ -51,18 +51,9 @@ public class NodeStateTest {
try (DockerTester dockerTester = new DockerTester()) {
setup(dockerTester);
// Change node state to dirty
- dockerTester.updateContainerNodeSpec(
- initialContainerNodeSpec.hostname,
- initialContainerNodeSpec.wantedDockerImage,
- initialContainerNodeSpec.containerName,
- Node.State.dirty,
- initialContainerNodeSpec.nodeType,
- initialContainerNodeSpec.nodeFlavor,
- initialContainerNodeSpec.wantedRestartGeneration,
- initialContainerNodeSpec.currentRestartGeneration,
- initialContainerNodeSpec.minCpuCores,
- initialContainerNodeSpec.minMainMemoryAvailableGb,
- initialContainerNodeSpec.minDiskAvailableGb);
+ dockerTester.updateContainerNodeSpec(new ContainerNodeSpec.Builder(initialContainerNodeSpec)
+ .nodeState(Node.State.dirty)
+ .build());
// Wait until it is marked ready
Optional<ContainerNodeSpec> containerNodeSpec;
@@ -88,21 +79,13 @@ public class NodeStateTest {
try (DockerTester dockerTester = new DockerTester()) {
setup(dockerTester);
- Optional<DockerImage> newDockerImage = Optional.of(new DockerImage("newDockerImage"));
+ DockerImage newDockerImage = new DockerImage("newDockerImage");
// Change node state to inactive and change the wanted docker image
- dockerTester.updateContainerNodeSpec(
- initialContainerNodeSpec.hostname,
- newDockerImage,
- initialContainerNodeSpec.containerName,
- Node.State.inactive,
- initialContainerNodeSpec.nodeType,
- initialContainerNodeSpec.nodeFlavor,
- initialContainerNodeSpec.wantedRestartGeneration,
- initialContainerNodeSpec.currentRestartGeneration,
- initialContainerNodeSpec.minCpuCores,
- initialContainerNodeSpec.minMainMemoryAvailableGb,
- initialContainerNodeSpec.minDiskAvailableGb);
+ dockerTester.updateContainerNodeSpec(new ContainerNodeSpec.Builder(initialContainerNodeSpec)
+ .wantedDockerImage(newDockerImage)
+ .nodeState(Node.State.inactive)
+ .build());
CallOrderVerifier callOrderVerifier = dockerTester.getCallOrderVerifier();
callOrderVerifier.assertInOrderWithAssertMessage("Node set to inactive, but no stop/delete call received",
@@ -111,18 +94,10 @@ public class NodeStateTest {
// Change node state to active
- dockerTester.updateContainerNodeSpec(
- initialContainerNodeSpec.hostname,
- newDockerImage,
- initialContainerNodeSpec.containerName,
- Node.State.active,
- initialContainerNodeSpec.nodeType,
- initialContainerNodeSpec.nodeFlavor,
- initialContainerNodeSpec.wantedRestartGeneration,
- initialContainerNodeSpec.currentRestartGeneration,
- initialContainerNodeSpec.minCpuCores,
- initialContainerNodeSpec.minMainMemoryAvailableGb,
- initialContainerNodeSpec.minDiskAvailableGb);
+ dockerTester.updateContainerNodeSpec(new ContainerNodeSpec.Builder(initialContainerNodeSpec)
+ .wantedDockerImage(newDockerImage)
+ .nodeState(Node.State.active)
+ .build());
// Check that the container is started again after the delete call
callOrderVerifier.assertInOrderWithAssertMessage("Node not started again after being put to active state",
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RebootTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RebootTest.java
index ecb340cea4d..fb725bfa6c0 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RebootTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RebootTest.java
@@ -64,14 +64,14 @@ public class RebootTest {
private ContainerNodeSpec createContainerNodeSpec() {
return new ContainerNodeSpec.Builder()
.hostname("host1")
- .wantedDockerImage(Optional.of(new DockerImage("dockerImage")))
+ .wantedDockerImage(new DockerImage("dockerImage"))
.containerName(new ContainerName("container"))
.nodeState(Node.State.active)
.nodeType("tenant")
.nodeFlavor("docker")
- .vespaVersion(Optional.of("6.50.0"))
- .wantedRestartGeneration(Optional.of(1L))
- .currentRestartGeneration(Optional.of(1L))
+ .vespaVersion("6.50.0")
+ .wantedRestartGeneration(1L)
+ .currentRestartGeneration(1L)
.build();
}
}
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 3b6314e75a2..5a7093c671f 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
@@ -9,7 +9,6 @@ import com.yahoo.vespa.hosted.provision.Node;
import org.junit.Test;
import java.net.UnknownHostException;
-import java.util.Optional;
/**
* Tests that different wanted and current restart generation leads to execution of restart command
@@ -48,13 +47,13 @@ public class RestartTest {
private ContainerNodeSpec createContainerNodeSpec(long wantedRestartGeneration, long currentRestartGeneration) {
return new ContainerNodeSpec.Builder()
.hostname("host1")
- .wantedDockerImage(Optional.of(new DockerImage("dockerImage")))
+ .wantedDockerImage(new DockerImage("dockerImage"))
.containerName(new ContainerName("container"))
.nodeState(Node.State.active)
.nodeType("tenant")
.nodeFlavor("docker")
- .wantedRestartGeneration(Optional.of(wantedRestartGeneration))
- .currentRestartGeneration(Optional.of(currentRestartGeneration))
+ .wantedRestartGeneration(wantedRestartGeneration)
+ .currentRestartGeneration(currentRestartGeneration)
.build();
}
}
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/ResumeTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/ResumeTest.java
index 4a441d0964a..cfe3cceb997 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/ResumeTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/ResumeTest.java
@@ -30,13 +30,13 @@ public class ResumeTest {
dockerTester.addContainerNodeSpec(new ContainerNodeSpec.Builder()
.hostname("host1")
- .wantedDockerImage(Optional.of(new DockerImage("dockerImage")))
+ .wantedDockerImage(new DockerImage("dockerImage"))
.containerName(new ContainerName("container"))
.nodeState(Node.State.active)
.nodeType("tenant")
.nodeFlavor("docker")
- .wantedRestartGeneration(Optional.of(1L))
- .currentRestartGeneration(Optional.of(1L))
+ .wantedRestartGeneration(1L)
+ .currentRestartGeneration(1L)
.build());
// Wait for node admin to be notified with node repo state and the docker container has been started
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RunInContainerTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RunInContainerTest.java
index 3e379fcb414..c4a3788b33f 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RunInContainerTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RunInContainerTest.java
@@ -112,13 +112,13 @@ public class RunInContainerTest {
ComponentsProviderWithMocks.nodeRepositoryMock
.addContainerNodeSpec(new ContainerNodeSpec.Builder()
.hostname("hostName")
- .wantedDockerImage(Optional.of(new DockerImage("dockerImage")))
+ .wantedDockerImage(new DockerImage("dockerImage"))
.containerName(new ContainerName("container"))
.nodeState(Node.State.active)
.nodeType("tenant")
.nodeFlavor("docker")
- .wantedRestartGeneration(Optional.of(1L))
- .currentRestartGeneration(Optional.of(1L))
+ .wantedRestartGeneration(1L)
+ .currentRestartGeneration(1L)
.build());
ComponentsProviderWithMocks.orchestratorMock.setForceGroupSuspendResponse(Optional.of("Denied"));
assertThat(doPutCall("suspend"), is(false));
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImplTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImplTest.java
index a30853a0c31..4732b69fa82 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImplTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImplTest.java
@@ -39,9 +39,9 @@ import static org.mockito.Mockito.when;
* @author bakksjo
*/
public class NodeAdminImplTest {
- private static final Optional<Double> MIN_CPU_CORES = Optional.of(1.0);
- private static final Optional<Double> MIN_MAIN_MEMORY_AVAILABLE_GB = Optional.of(1.0);
- private static final Optional<Double> MIN_DISK_AVAILABLE_GB = Optional.of(1.0);
+ private static final double MIN_CPU_CORES = 1.0;
+ private static final double MIN_MAIN_MEMORY_AVAILABLE_GB = 1.0;
+ private static final double MIN_DISK_AVAILABLE_GB = 1.0;
// Trick to allow mocking of typed interface without casts/warnings.
private interface NodeAgentFactory extends Function<String, NodeAgent> {}
@@ -66,7 +66,7 @@ public class NodeAdminImplTest {
final Container existingContainer = new Container(hostName, dockerImage, containerName, isRunning);
final ContainerNodeSpec nodeSpec = new ContainerNodeSpec.Builder()
.hostname(hostName)
- .wantedDockerImage(Optional.of(dockerImage))
+ .wantedDockerImage(dockerImage)
.containerName(containerName)
.nodeState(Node.State.active)
.nodeType("tenant")
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java
index 4757333d2a6..e9fff911d8c 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java
@@ -47,10 +47,10 @@ import static org.mockito.Mockito.when;
* @author bakksjo
*/
public class NodeAgentImplTest {
- private static final Optional<Double> MIN_CPU_CORES = Optional.of(1.0);
- private static final Optional<Double> MIN_MAIN_MEMORY_AVAILABLE_GB = Optional.of(1.0);
- private static final Optional<Double> MIN_DISK_AVAILABLE_GB = Optional.of(1.0);
- private static final Optional<String> vespaVersion = Optional.of("7.8.9");
+ private static final double MIN_CPU_CORES = 1.0;
+ private static final double MIN_MAIN_MEMORY_AVAILABLE_GB = 1.0;
+ private static final double MIN_DISK_AVAILABLE_GB = 1.0;
+ private static final String vespaVersion = "7.8.9";
private final String hostName = "hostname";
private final DockerOperations dockerOperations = mock(DockerOperations.class);
@@ -76,14 +76,14 @@ public class NodeAgentImplTest {
final ContainerName containerName = new ContainerName("container-name");
final ContainerNodeSpec nodeSpec = new ContainerNodeSpec.Builder()
.hostname(hostName)
- .wantedDockerImage(Optional.of(dockerImage))
+ .wantedDockerImage(dockerImage)
.containerName(containerName)
.nodeState(Node.State.active)
.nodeType("tenant")
.nodeFlavor("docker")
- .wantedRestartGeneration(Optional.of(restartGeneration))
- .currentRestartGeneration(Optional.of(restartGeneration))
- .wantedRebootGeneration(Optional.of(rebootGeneration))
+ .wantedRestartGeneration(restartGeneration)
+ .currentRestartGeneration(restartGeneration)
+ .wantedRebootGeneration(rebootGeneration)
.minCpuCores(MIN_CPU_CORES)
.minMainMemoryAvailableGb(MIN_MAIN_MEMORY_AVAILABLE_GB)
.minDiskAvailableGb(MIN_DISK_AVAILABLE_GB)
@@ -94,7 +94,7 @@ public class NodeAgentImplTest {
when(dockerOperations.getContainerStats(any())).thenReturn(Optional.of(containerStats));
when(dockerOperations.shouldScheduleDownloadOfImage(any())).thenReturn(false);
when(dockerOperations.startContainerIfNeeded(eq(nodeSpec))).thenReturn(false);
- when(dockerOperations.getVespaVersion(eq(containerName))).thenReturn(vespaVersion);
+ when(dockerOperations.getVespaVersion(eq(containerName))).thenReturn(Optional.of(vespaVersion));
when(nodeRepository.getContainerNodeSpec(hostName)).thenReturn(Optional.of(nodeSpec));
nodeAgent.tick();
@@ -113,7 +113,7 @@ public class NodeAgentImplTest {
.withRestartGeneration(restartGeneration)
.withRebootGeneration(rebootGeneration)
.withDockerImage(dockerImage)
- .withVespaVersion(vespaVersion.get()));
+ .withVespaVersion(vespaVersion));
inOrder.verify(orchestrator).resume(hostName);
}
@@ -125,14 +125,14 @@ public class NodeAgentImplTest {
final ContainerName containerName = new ContainerName("container-name");
final ContainerNodeSpec nodeSpec = new ContainerNodeSpec.Builder()
.hostname(hostName)
- .wantedDockerImage(Optional.of(dockerImage))
+ .wantedDockerImage(dockerImage)
.containerName(containerName)
.nodeState(Node.State.active)
.nodeType("tenant")
.nodeFlavor("docker")
- .wantedRestartGeneration(Optional.of(restartGeneration))
- .currentRestartGeneration(Optional.of(restartGeneration))
- .wantedRebootGeneration(Optional.of(rebootGeneration))
+ .wantedRestartGeneration(restartGeneration)
+ .currentRestartGeneration(restartGeneration)
+ .wantedRebootGeneration(rebootGeneration)
.minCpuCores(MIN_CPU_CORES)
.minMainMemoryAvailableGb(MIN_MAIN_MEMORY_AVAILABLE_GB)
.minDiskAvailableGb(MIN_DISK_AVAILABLE_GB)
@@ -143,7 +143,7 @@ public class NodeAgentImplTest {
when(dockerOperations.getContainerStats(any())).thenReturn(Optional.of(containerStats));
when(dockerOperations.shouldScheduleDownloadOfImage(any())).thenReturn(false);
when(dockerOperations.startContainerIfNeeded(eq(nodeSpec))).thenReturn(true);
- when(dockerOperations.getVespaVersion(eq(containerName))).thenReturn(vespaVersion);
+ when(dockerOperations.getVespaVersion(eq(containerName))).thenReturn(Optional.of(vespaVersion));
when(maintainer.pathInNodeAdminFromPathInNode(any(ContainerName.class), any(String.class))).thenReturn(Files.createTempDirectory("foo"));
when(nodeRepository.getContainerNodeSpec(hostName)).thenReturn(Optional.of(nodeSpec));
@@ -160,7 +160,7 @@ public class NodeAgentImplTest {
.withRestartGeneration(restartGeneration)
.withRebootGeneration(rebootGeneration)
.withDockerImage(dockerImage)
- .withVespaVersion(vespaVersion.get()));
+ .withVespaVersion(vespaVersion));
inOrder.verify(orchestrator).resume(hostName);
}
@@ -173,13 +173,13 @@ public class NodeAgentImplTest {
final long currentRestartGeneration = 1;
final ContainerNodeSpec nodeSpec = new ContainerNodeSpec.Builder()
.hostname(hostName)
- .wantedDockerImage(Optional.of(newDockerImage))
+ .wantedDockerImage(newDockerImage)
.containerName(containerName)
.nodeState(Node.State.active)
.nodeType("tenant")
.nodeFlavor("docker")
- .wantedRestartGeneration(Optional.of(wantedRestartGeneration))
- .currentRestartGeneration(Optional.of(currentRestartGeneration))
+ .wantedRestartGeneration(wantedRestartGeneration)
+ .currentRestartGeneration(currentRestartGeneration)
.minCpuCores(MIN_CPU_CORES)
.minMainMemoryAvailableGb(MIN_MAIN_MEMORY_AVAILABLE_GB)
.minDiskAvailableGb(MIN_DISK_AVAILABLE_GB)
@@ -208,13 +208,13 @@ public class NodeAgentImplTest {
final ContainerName containerName = new ContainerName("container-name");
final ContainerNodeSpec nodeSpec = new ContainerNodeSpec.Builder()
.hostname(hostName)
- .wantedDockerImage(Optional.of(dockerImage))
+ .wantedDockerImage(dockerImage)
.containerName(containerName)
.nodeState(Node.State.active)
.nodeType("tenant")
.nodeFlavor("docker")
- .wantedRestartGeneration(Optional.of(wantedRestartGeneration))
- .currentRestartGeneration(Optional.of(currentRestartGeneration))
+ .wantedRestartGeneration(wantedRestartGeneration)
+ .currentRestartGeneration(currentRestartGeneration)
.minCpuCores(MIN_CPU_CORES)
.minMainMemoryAvailableGb(MIN_MAIN_MEMORY_AVAILABLE_GB)
.minDiskAvailableGb(MIN_DISK_AVAILABLE_GB)
@@ -240,13 +240,12 @@ public class NodeAgentImplTest {
final ContainerName containerName = new ContainerName("container-name");
final ContainerNodeSpec nodeSpec = new ContainerNodeSpec.Builder()
.hostname(hostName)
- .wantedDockerImage(Optional.empty())
.containerName(containerName)
.nodeState(Node.State.failed)
.nodeType("tenant")
.nodeFlavor("docker")
- .wantedRestartGeneration(Optional.of(restartGeneration))
- .currentRestartGeneration(Optional.of(restartGeneration))
+ .wantedRestartGeneration(restartGeneration)
+ .currentRestartGeneration(restartGeneration)
.minCpuCores(MIN_CPU_CORES)
.minMainMemoryAvailableGb(MIN_MAIN_MEMORY_AVAILABLE_GB)
.minDiskAvailableGb(MIN_DISK_AVAILABLE_GB)
@@ -276,14 +275,13 @@ public class NodeAgentImplTest {
final ContainerName containerName = new ContainerName("container-name");
final ContainerNodeSpec nodeSpec = new ContainerNodeSpec.Builder()
.hostname(hostName)
- .wantedDockerImage(Optional.empty())
.containerName(containerName)
.nodeState(Node.State.ready)
.nodeType("tenant")
.nodeFlavor("docker")
- .wantedRestartGeneration(Optional.of(restartGeneration))
- .currentRestartGeneration(Optional.of(restartGeneration))
- .wantedRebootGeneration(Optional.of(rebootGeneration))
+ .wantedRestartGeneration(restartGeneration)
+ .currentRestartGeneration(restartGeneration)
+ .wantedRebootGeneration(rebootGeneration)
.minCpuCores(MIN_CPU_CORES)
.minMainMemoryAvailableGb(MIN_MAIN_MEMORY_AVAILABLE_GB)
.minDiskAvailableGb(MIN_DISK_AVAILABLE_GB)
@@ -314,14 +312,13 @@ public class NodeAgentImplTest {
final ContainerName containerName = new ContainerName("container-name");
final ContainerNodeSpec nodeSpec = new ContainerNodeSpec.Builder()
.hostname(hostName)
- .wantedDockerImage(Optional.empty())
.containerName(containerName)
.nodeState(Node.State.inactive)
.nodeType("tenant")
.nodeFlavor("docker")
- .wantedRestartGeneration(Optional.of(restartGeneration))
- .currentRestartGeneration(Optional.of(restartGeneration))
- .wantedRebootGeneration(Optional.of(rebootGeneration))
+ .wantedRestartGeneration(restartGeneration)
+ .currentRestartGeneration(restartGeneration)
+ .wantedRebootGeneration(rebootGeneration)
.minCpuCores(MIN_CPU_CORES)
.minMainMemoryAvailableGb(MIN_MAIN_MEMORY_AVAILABLE_GB)
.minDiskAvailableGb(MIN_DISK_AVAILABLE_GB)
@@ -350,19 +347,22 @@ public class NodeAgentImplTest {
throws Exception {
final DockerImage dockerImage = new DockerImage("dockerImage");
final ContainerName containerName = new ContainerName("container-name");
- final ContainerNodeSpec nodeSpec = new ContainerNodeSpec.Builder()
+ final ContainerNodeSpec.Builder nodeSpecBuilder = new ContainerNodeSpec.Builder()
.hostname(hostName)
- .wantedDockerImage(Optional.of(dockerImage))
+ .wantedDockerImage(dockerImage)
.containerName(containerName)
.nodeState(nodeState)
.nodeType("tenant")
.nodeFlavor("docker")
- .wantedRestartGeneration(wantedRestartGeneration)
- .currentRestartGeneration(wantedRestartGeneration)
.minCpuCores(MIN_CPU_CORES)
.minMainMemoryAvailableGb(MIN_MAIN_MEMORY_AVAILABLE_GB)
- .minDiskAvailableGb(MIN_DISK_AVAILABLE_GB)
- .build();
+ .minDiskAvailableGb(MIN_DISK_AVAILABLE_GB);
+
+ wantedRestartGeneration.ifPresent(restartGeneration -> nodeSpecBuilder
+ .wantedRestartGeneration(restartGeneration)
+ .currentRestartGeneration(restartGeneration));
+
+ final ContainerNodeSpec nodeSpec = nodeSpecBuilder.build();
when(nodeRepository.getContainerNodeSpec(hostName)).thenReturn(Optional.of(nodeSpec));
when(dockerOperations.getContainer(eq(hostName))).thenReturn(
@@ -409,13 +409,13 @@ public class NodeAgentImplTest {
final ContainerName containerName = new ContainerName("container-name");
final ContainerNodeSpec nodeSpec = new ContainerNodeSpec.Builder()
.hostname(hostName)
- .wantedDockerImage(Optional.of(wantedDockerImage))
+ .wantedDockerImage(wantedDockerImage)
.containerName(containerName)
.nodeState(Node.State.active)
.nodeType("tenant")
.nodeFlavor("docker")
- .wantedRestartGeneration(Optional.of(restartGeneration))
- .currentRestartGeneration(Optional.of(restartGeneration))
+ .wantedRestartGeneration(restartGeneration)
+ .currentRestartGeneration(restartGeneration)
.minCpuCores(MIN_CPU_CORES)
.minMainMemoryAvailableGb(MIN_MAIN_MEMORY_AVAILABLE_GB)
.minDiskAvailableGb(MIN_DISK_AVAILABLE_GB)
@@ -426,7 +426,7 @@ public class NodeAgentImplTest {
when(dockerOperations.getContainer(eq(hostName))).thenReturn(Optional.of(new Container(hostName, wantedDockerImage, containerName, true)));
when(nodeRepository.getContainerNodeSpec(eq(hostName))).thenReturn(Optional.of(nodeSpec));
when(dockerOperations.shouldScheduleDownloadOfImage(eq(wantedDockerImage))).thenReturn(false);
- when(dockerOperations.getVespaVersion(eq(containerName))).thenReturn(vespaVersion);
+ when(dockerOperations.getVespaVersion(eq(containerName))).thenReturn(Optional.of(vespaVersion));
verify(dockerOperations, never()).removeContainer(any(), any(), any());
@@ -482,8 +482,8 @@ public class NodeAgentImplTest {
.nodeState(Node.State.active)
.nodeType("tenant")
.nodeFlavor("docker")
- .owner(Optional.of(owner))
- .membership(Optional.of(membership))
+ .owner(owner)
+ .membership(membership)
.build();
long totalContainerCpuTime = (long) ((Map) cpu_stats.get("cpu_usage")).get("total_usage");