summaryrefslogtreecommitdiffstats
path: root/node-admin
diff options
context:
space:
mode:
authorfreva <valerijf@yahoo-inc.com>2017-03-03 14:16:16 +0100
committerfreva <valerijf@yahoo-inc.com>2017-03-03 14:16:16 +0100
commita4a3488dbccad10b4727500d2a79cbb69a21dbd1 (patch)
tree31bd34d3291cae7d6c772eac86809202fdab4b9a /node-admin
parentf71fe901838099d811a1f1be22bbaa287139f2bd (diff)
Fixed tests
Diffstat (limited to 'node-admin')
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/ContainerAclSpec.java8
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/ContainerNodeSpec.java17
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperations.java6
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java38
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainer.java4
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/AclMaintainer.java8
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImpl.java5
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgent.java4
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java48
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/CallOrderVerifier.java2
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerFailTest.java15
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerTester.java6
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/MultiDockerTest.java38
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/NodeStateTest.java24
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RebootTest.java10
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RestartTest.java12
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/ResumeTest.java14
-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/integrationTests/StorageMaintainerMock.java2
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/AclMaintainerTest.java7
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImplTest.java5
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterTest.java7
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java59
-rw-r--r--node-admin/src/test/resources/docker.stats.metrics.expected.json8
24 files changed, 160 insertions, 193 deletions
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/ContainerAclSpec.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/ContainerAclSpec.java
index d1309c77487..00ce854e519 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/ContainerAclSpec.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/ContainerAclSpec.java
@@ -1,5 +1,7 @@
package com.yahoo.vespa.hosted.node.admin;
+import com.yahoo.vespa.hosted.dockerapi.ContainerName;
+
import java.util.Objects;
/**
@@ -11,9 +13,9 @@ public class ContainerAclSpec {
private final String hostname;
private final String ipAddress;
- private final String trustedBy;
+ private final ContainerName trustedBy;
- public ContainerAclSpec(String hostname, String ipAddress, String trustedBy) {
+ public ContainerAclSpec(String hostname, String ipAddress, ContainerName trustedBy) {
this.hostname = hostname;
this.ipAddress = ipAddress;
this.trustedBy = trustedBy;
@@ -27,7 +29,7 @@ public class ContainerAclSpec {
return ipAddress;
}
- public String trustedBy() {
+ public ContainerName trustedBy() {
return trustedBy;
}
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 4fe85b7ab80..5ad60475276 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
@@ -1,7 +1,6 @@
// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.hosted.node.admin;
-import com.yahoo.vespa.hosted.dockerapi.ContainerName;
import com.yahoo.vespa.hosted.dockerapi.DockerImage;
import com.yahoo.vespa.hosted.provision.Node;
@@ -15,7 +14,6 @@ import java.util.Optional;
public class ContainerNodeSpec {
public final String hostname;
public final Optional<DockerImage> wantedDockerImage;
- public final ContainerName containerName;
public final Node.State nodeState;
public final String nodeType;
public final String nodeFlavor;
@@ -33,7 +31,6 @@ public class ContainerNodeSpec {
public ContainerNodeSpec(
final String hostname,
final Optional<DockerImage> wantedDockerImage,
- final ContainerName containerName,
final Node.State nodeState,
final String nodeType,
final String nodeFlavor,
@@ -48,14 +45,12 @@ public class ContainerNodeSpec {
final Optional<Double> minMainMemoryAvailableGb,
final Optional<Double> minDiskAvailableGb) {
Objects.requireNonNull(hostname);
- Objects.requireNonNull(containerName);
Objects.requireNonNull(nodeState);
Objects.requireNonNull(nodeType);
Objects.requireNonNull(nodeFlavor);
this.hostname = hostname;
this.wantedDockerImage = wantedDockerImage;
- this.containerName = containerName;
this.nodeState = nodeState;
this.nodeType = nodeType;
this.nodeFlavor = nodeFlavor;
@@ -80,7 +75,6 @@ public class ContainerNodeSpec {
return Objects.equals(hostname, that.hostname) &&
Objects.equals(wantedDockerImage, that.wantedDockerImage) &&
- Objects.equals(containerName, that.containerName) &&
Objects.equals(nodeState, that.nodeState) &&
Objects.equals(nodeType, that.nodeType) &&
Objects.equals(nodeFlavor, that.nodeFlavor) &&
@@ -101,7 +95,6 @@ public class ContainerNodeSpec {
return Objects.hash(
hostname,
wantedDockerImage,
- containerName,
nodeState,
nodeType,
nodeFlavor,
@@ -122,7 +115,6 @@ public class ContainerNodeSpec {
return getClass().getSimpleName() + " {"
+ " hostname=" + hostname
+ " wantedDockerImage=" + wantedDockerImage
- + " containerName=" + containerName
+ " nodeState=" + nodeState
+ " nodeType = " + nodeType
+ " nodeFlavor = " + nodeFlavor
@@ -235,7 +227,6 @@ public class ContainerNodeSpec {
public static class Builder {
private String hostname;
private Optional<DockerImage> wantedDockerImage = Optional.empty();
- private ContainerName containerName;
private Node.State nodeState;
private String nodeType;
private String nodeFlavor;
@@ -254,7 +245,6 @@ public class ContainerNodeSpec {
public Builder(ContainerNodeSpec nodeSpec) {
hostname(nodeSpec.hostname);
- containerName(nodeSpec.containerName);
nodeState(nodeSpec.nodeState);
nodeType(nodeSpec.nodeType);
nodeFlavor(nodeSpec.nodeFlavor);
@@ -282,11 +272,6 @@ public class ContainerNodeSpec {
return this;
}
- public Builder containerName(ContainerName containerName) {
- this.containerName = containerName;
- return this;
- }
-
public Builder nodeState(Node.State nodeState) {
this.nodeState = nodeState;
return this;
@@ -352,7 +337,7 @@ public class ContainerNodeSpec {
}
public ContainerNodeSpec build() {
- return new ContainerNodeSpec(hostname, wantedDockerImage, containerName, nodeState, nodeType, nodeFlavor,
+ return new ContainerNodeSpec(hostname, wantedDockerImage, nodeState, nodeType, nodeFlavor,
vespaVersion, owner, membership,
wantedRestartGeneration, currentRestartGeneration,
wantedRebootGeneration, currentRebootGeneration,
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperations.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperations.java
index 3c3aeb5bba8..fece46d31c7 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperations.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperations.java
@@ -15,14 +15,14 @@ public interface DockerOperations {
Optional<String> getVespaVersion(ContainerName containerName);
// Returns true if started
- boolean startContainerIfNeeded(ContainerNodeSpec nodeSpec);
+ boolean startContainerIfNeeded(ContainerName containerName, ContainerNodeSpec nodeSpec);
// Returns false if image is already downloaded
boolean shouldScheduleDownloadOfImage(DockerImage dockerImage);
- Optional<Container> getContainer(String hostname);
+ Optional<Container> getContainer(ContainerName containerName);
- void scheduleDownloadOfImage(ContainerNodeSpec nodeSpec, Runnable callback);
+ void scheduleDownloadOfImage(ContainerName containerName, ContainerNodeSpec nodeSpec, Runnable callback);
void removeContainer(ContainerNodeSpec nodeSpec, Container existingContainer);
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 73f01c4cae8..1ae6c64b863 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
@@ -135,10 +135,10 @@ public class DockerOperationsImpl implements DockerOperations {
// Returns true if started
@Override
- public boolean startContainerIfNeeded(final ContainerNodeSpec nodeSpec) {
- if (docker.getContainer(nodeSpec.hostname).isPresent()) return false;
+ public boolean startContainerIfNeeded(ContainerName containerName, final ContainerNodeSpec nodeSpec) {
+ if (docker.getContainer(containerName).isPresent()) return false;
- startContainer(nodeSpec);
+ startContainer(containerName, nodeSpec);
numberOfRunningContainersGauge.sample(getAllManagedContainers().size());
return true;
}
@@ -150,8 +150,8 @@ public class DockerOperationsImpl implements DockerOperations {
}
@Override
- public Optional<Container> getContainer(String hostname) {
- return docker.getContainer(hostname);
+ public Optional<Container> getContainer(ContainerName containerName) {
+ return docker.getContainer(containerName);
}
/**
@@ -175,10 +175,10 @@ public class DockerOperationsImpl implements DockerOperations {
}
}
- private void startContainer(final ContainerNodeSpec nodeSpec) {
- PrefixLogger logger = PrefixLogger.getNodeAgentLogger(DockerOperationsImpl.class, nodeSpec.containerName);
+ private void startContainer(ContainerName containerName, final ContainerNodeSpec nodeSpec) {
+ PrefixLogger logger = PrefixLogger.getNodeAgentLogger(DockerOperationsImpl.class, containerName);
- logger.info("Starting container " + nodeSpec.containerName);
+ logger.info("Starting container " + containerName);
try {
InetAddress nodeInetAddress = environment.getInetAddressForHost(nodeSpec.hostname);
final boolean isIPv6 = nodeInetAddress instanceof Inet6Address;
@@ -186,7 +186,7 @@ public class DockerOperationsImpl implements DockerOperations {
String configServers = String.join(",", environment.getConfigServerHosts());
Docker.CreateContainerCommand command = docker.createContainerCommand(
nodeSpec.wantedDockerImage.get(),
- nodeSpec.containerName,
+ containerName,
nodeSpec.hostname)
.withManagedBy(MANAGER_NAME)
.withNetworkMode(DockerImpl.DOCKER_CUSTOM_MACVLAN_NETWORK_NAME)
@@ -199,7 +199,7 @@ public class DockerOperationsImpl implements DockerOperations {
command.withVolume("/etc/hosts", "/etc/hosts");
for (String pathInNode : DIRECTORIES_TO_MOUNT.keySet()) {
- String pathInHost = environment.pathInHostFromPathInNode(nodeSpec.containerName, pathInNode).toString();
+ String pathInHost = environment.pathInHostFromPathInNode(containerName, pathInNode).toString();
command.withVolume(pathInHost, pathInNode);
}
@@ -221,17 +221,17 @@ public class DockerOperationsImpl implements DockerOperations {
command.create();
if (isIPv6) {
- docker.connectContainerToNetwork(nodeSpec.containerName, "bridge");
- docker.startContainer(nodeSpec.containerName);
- setupContainerNetworkingWithScript(nodeSpec.containerName);
+ docker.connectContainerToNetwork(containerName, "bridge");
+ docker.startContainer(containerName);
+ setupContainerNetworkingWithScript(containerName);
} else {
- docker.startContainer(nodeSpec.containerName);
+ docker.startContainer(containerName);
}
DIRECTORIES_TO_MOUNT.entrySet().stream().filter(Map.Entry::getValue).forEach(entry ->
- docker.executeInContainerAsRoot(nodeSpec.containerName, "chmod", "-R", "a+w", entry.getKey()));
+ docker.executeInContainerAsRoot(containerName, "chmod", "-R", "a+w", entry.getKey()));
} catch (IOException e) {
- throw new RuntimeException("Failed to create container " + nodeSpec.containerName.asString(), e);
+ throw new RuntimeException("Failed to create container " + containerName.asString(), e);
}
}
@@ -246,8 +246,8 @@ public class DockerOperationsImpl implements DockerOperations {
}
@Override
- public void scheduleDownloadOfImage(final ContainerNodeSpec nodeSpec, Runnable callback) {
- PrefixLogger logger = PrefixLogger.getNodeAgentLogger(DockerOperationsImpl.class, nodeSpec.containerName);
+ public void scheduleDownloadOfImage(ContainerName containerName, final ContainerNodeSpec nodeSpec, Runnable callback) {
+ PrefixLogger logger = PrefixLogger.getNodeAgentLogger(DockerOperationsImpl.class, containerName);
logger.info("Schedule async download of " + nodeSpec.wantedDockerImage.get());
final CompletableFuture<DockerImage> asyncPullResult = docker.pullImageAsync(nodeSpec.wantedDockerImage.get());
@@ -263,8 +263,8 @@ public class DockerOperationsImpl implements DockerOperations {
@Override
public void removeContainer(final ContainerNodeSpec nodeSpec, final Container existingContainer) {
- PrefixLogger logger = PrefixLogger.getNodeAgentLogger(DockerOperationsImpl.class, nodeSpec.containerName);
final ContainerName containerName = existingContainer.name;
+ PrefixLogger logger = PrefixLogger.getNodeAgentLogger(DockerOperationsImpl.class, containerName);
if (existingContainer.state.isRunning()) {
logger.info("Stopping container " + containerName.asString());
docker.stopContainer(containerName);
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainer.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainer.java
index 2f97f18dcb6..405a8aded54 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainer.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainer.java
@@ -158,7 +158,7 @@ public class StorageMaintainer {
/**
* Checks if container has any new coredumps, reports and archives them if so
*/
- public void handleCoreDumpsForContainer(ContainerNodeSpec nodeSpec, Environment environment) {
+ public void handleCoreDumpsForContainer(ContainerName containerName, ContainerNodeSpec nodeSpec, Environment environment) {
Map<String, Object> attributes = new HashMap<>();
attributes.put("hostname", nodeSpec.hostname);
attributes.put("parent_hostname", HostName.getLocalhost());
@@ -182,7 +182,7 @@ public class StorageMaintainer {
MaintainerExecutor maintainerExecutor = new MaintainerExecutor(true);
maintainerExecutor.addJob("handle-core-dumps")
.withArgument("doneCoredumpsPath", environment.pathInNodeAdminToDoneCoredumps())
- .withArgument("containerCoredumpsPath", environment.pathInNodeAdminFromPathInNode(nodeSpec.containerName, "/home/y/var/crash"))
+ .withArgument("containerCoredumpsPath", environment.pathInNodeAdminFromPathInNode(containerName, "/home/y/var/crash"))
.withArgument("attributes", attributes);
maintainerExecutor.execute();
}
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/AclMaintainer.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/AclMaintainer.java
index 236f53bc18e..55abbe1c79e 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/AclMaintainer.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/AclMaintainer.java
@@ -86,12 +86,12 @@ public class AclMaintainer implements Runnable {
private void configureAcls() {
final List<ContainerAclSpec> aclSpecs = nodeRepository.getContainerAclSpecs(nodeAdminHostnameSupplier.get());
- final Map<String, List<ContainerAclSpec>> aclSpecsGroupedByHostname = aclSpecs.stream()
+ final Map<ContainerName, List<ContainerAclSpec>> aclSpecsGroupedByHostname = aclSpecs.stream()
.collect(Collectors.groupingBy(ContainerAclSpec::trustedBy));
- for (Map.Entry<String, List<ContainerAclSpec>> entry : aclSpecsGroupedByHostname.entrySet()) {
- final String hostname = entry.getKey();
- final Optional<Container> container = dockerOperations.getContainer(hostname);
+ for (Map.Entry<ContainerName, List<ContainerAclSpec>> entry : aclSpecsGroupedByHostname.entrySet()) {
+ final ContainerName containerName = entry.getKey();
+ final Optional<Container> container = dockerOperations.getContainer(containerName);
if (!container.isPresent()) {
// Container belongs to this Docker host, but is currently unallocated
continue;
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImpl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImpl.java
index e539566d393..9dca02d4fef 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImpl.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImpl.java
@@ -145,9 +145,8 @@ public class NodeAdminImpl implements NodeAdmin {
}
for (NodeAgent nodeAgent : nodeAgents.values()) {
try {
- final Optional<ContainerNodeSpec> containerNodeSpec = nodeAgent.getContainerNodeSpec();
- if (containerNodeSpec.isPresent() && nodes.contains(containerNodeSpec.get().hostname)) {
- final ContainerName containerName = containerNodeSpec.get().containerName;
+ if (nodes.contains(nodeAgent.getHostname())) {
+ final ContainerName containerName = nodeAgent.getContainerName();
if ( ! isFrozen()) return Optional.of("Node agent for " + containerName + " is not frozen");
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgent.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgent.java
index d03a5fe9af5..e4ea3acef11 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgent.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgent.java
@@ -66,6 +66,10 @@ public interface NodeAgent {
*/
void updateContainerNodeMetrics();
+ ContainerName getContainerName();
+
+ String getHostname();
+
/**
* Returns true if NodeAgent is waiting for an image download to finish
*/
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 89d27d33287..3ab48869c71 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
@@ -11,7 +11,6 @@ import com.yahoo.vespa.hosted.node.admin.ContainerNodeSpec;
import com.yahoo.vespa.hosted.node.admin.docker.DockerOperations;
import com.yahoo.vespa.hosted.node.admin.maintenance.StorageMaintainer;
import com.yahoo.vespa.hosted.node.admin.noderepository.NodeRepository;
-import com.yahoo.vespa.hosted.node.admin.noderepository.NodeRepositoryImpl;
import com.yahoo.vespa.hosted.node.admin.orchestrator.Orchestrator;
import com.yahoo.vespa.hosted.node.admin.orchestrator.OrchestratorException;
import com.yahoo.vespa.hosted.node.admin.util.Environment;
@@ -53,6 +52,7 @@ public class NodeAgentImpl implements NodeAgent {
private DockerImage imageBeingDownloaded = null;
private final String hostname;
+ private final ContainerName containerName;
private final NodeRepository nodeRepository;
private final Orchestrator orchestrator;
@@ -95,10 +95,10 @@ public class NodeAgentImpl implements NodeAgent {
this.nodeRepository = nodeRepository;
this.orchestrator = orchestrator;
this.hostname = hostName;
+ this.containerName = ContainerName.fromHostname(hostName);
this.dockerOperations = dockerOperations;
this.storageMaintainer = storageMaintainer;
- this.logger = PrefixLogger.getNodeAgentLogger(NodeAgentImpl.class,
- NodeRepositoryImpl.containerNameFromHostName(hostName));
+ this.logger = PrefixLogger.getNodeAgentLogger(NodeAgentImpl.class, containerName);
this.metricReceiver = metricReceiver;
this.environment = environment;
}
@@ -160,7 +160,7 @@ public class NodeAgentImpl implements NodeAgent {
}
// If the container is already running, initialize vespaVersion and lastCpuMetric
- dockerOperations.getContainer(hostname)
+ dockerOperations.getContainer(containerName)
.filter(container -> container.state.isRunning())
.ifPresent(container -> {
vespaVersion = dockerOperations.getVespaVersion(container.name);
@@ -195,7 +195,7 @@ public class NodeAgentImpl implements NodeAgent {
}
addDebugMessage("Starting optional node program resume command");
logger.info("Starting optional node program resume command");
- dockerOperations.resumeNode(nodeSpec.containerName);
+ dockerOperations.resumeNode(containerName);
containerState = RUNNING;
}
@@ -236,10 +236,10 @@ public class NodeAgentImpl implements NodeAgent {
}
private void startContainerIfNeeded(final ContainerNodeSpec nodeSpec) {
- if (dockerOperations.startContainerIfNeeded(nodeSpec)) {
+ if (dockerOperations.startContainerIfNeeded(containerName, nodeSpec)) {
metricReceiver.unsetMetricsForContainer(hostname);
lastCpuMetric = new CpuUsageReporter(Instant.now());
- vespaVersion = dockerOperations.getVespaVersion(nodeSpec.containerName);
+ vespaVersion = dockerOperations.getVespaVersion(containerName);
configureContainerMetrics(nodeSpec);
addDebugMessage("startContainerIfNeeded: containerState " + containerState + " -> " +
@@ -262,7 +262,7 @@ public class NodeAgentImpl implements NodeAgent {
}
Optional<String> restartReason = shouldRestartServices(nodeSpec);
if (restartReason.isPresent()) {
- Optional<Container> existingContainer = dockerOperations.getContainer(hostname);
+ Optional<Container> existingContainer = dockerOperations.getContainer(containerName);
if (existingContainer.isPresent()) {
logger.info("Will restart services for container " + existingContainer.get() + ": " + restartReason.get());
restartServices(nodeSpec, existingContainer.get(), orchestrator);
@@ -318,7 +318,7 @@ public class NodeAgentImpl implements NodeAgent {
// Returns true if container is absent on return
private boolean removeContainerIfNeeded(ContainerNodeSpec nodeSpec, String hostname, Orchestrator orchestrator)
throws Exception {
- Optional<Container> existingContainer = dockerOperations.getContainer(hostname);
+ Optional<Container> existingContainer = dockerOperations.getContainer(containerName);
if (!existingContainer.isPresent()) {
return true;
}
@@ -350,7 +350,7 @@ public class NodeAgentImpl implements NodeAgent {
}
imageBeingDownloaded = nodeSpec.wantedDockerImage.get();
// Create a signalWorkToBeDone when download is finished.
- dockerOperations.scheduleDownloadOfImage(nodeSpec, this::signalWorkToBeDone);
+ dockerOperations.scheduleDownloadOfImage(containerName, nodeSpec, this::signalWorkToBeDone);
} else if (imageBeingDownloaded != null) { // Image was downloading, but now it's ready
imageBeingDownloaded = null;
}
@@ -429,8 +429,8 @@ public class NodeAgentImpl implements NodeAgent {
break;
case active:
storageMaintainer.ifPresent(maintainer -> {
- maintainer.removeOldFilesFromNode(nodeSpec.containerName);
- maintainer.handleCoreDumpsForContainer(nodeSpec, environment);
+ maintainer.removeOldFilesFromNode(containerName);
+ maintainer.handleCoreDumpsForContainer(containerName, nodeSpec, environment);
});
scheduleDownLoadIfNeeded(nodeSpec);
if (imageBeingDownloaded != null) {
@@ -456,7 +456,7 @@ public class NodeAgentImpl implements NodeAgent {
orchestrator.resume(nodeSpec.hostname);
break;
case inactive:
- storageMaintainer.ifPresent(maintainer -> maintainer.removeOldFilesFromNode(nodeSpec.containerName));
+ storageMaintainer.ifPresent(maintainer -> maintainer.removeOldFilesFromNode(containerName));
removeContainerIfNeededUpdateContainerState(nodeSpec);
updateNodeRepoWithCurrentAttributes(nodeSpec);
break;
@@ -464,10 +464,10 @@ public class NodeAgentImpl implements NodeAgent {
nodeRepository.markAsDirty(nodeSpec.hostname);
break;
case dirty:
- storageMaintainer.ifPresent(maintainer -> maintainer.removeOldFilesFromNode(nodeSpec.containerName));
+ storageMaintainer.ifPresent(maintainer -> maintainer.removeOldFilesFromNode(containerName));
removeContainerIfNeededUpdateContainerState(nodeSpec);
logger.info("State is " + nodeSpec.nodeState + ", will delete application storage and mark node as ready");
- storageMaintainer.ifPresent(maintainer -> maintainer.archiveNodeData(nodeSpec.containerName));
+ storageMaintainer.ifPresent(maintainer -> maintainer.archiveNodeData(containerName));
updateNodeRepoAndMarkNodeAsReady(nodeSpec);
break;
default:
@@ -483,7 +483,7 @@ public class NodeAgentImpl implements NodeAgent {
}
if (nodeSpec == null || !vespaVersion.isPresent()) return;
- Optional<Docker.ContainerStats> containerStats = dockerOperations.getContainerStats(nodeSpec.containerName);
+ Optional<Docker.ContainerStats> containerStats = dockerOperations.getContainerStats(containerName);
if ( ! containerStats.isPresent()) return;
Docker.ContainerStats stats = containerStats.get();
@@ -537,7 +537,7 @@ public class NodeAgentImpl implements NodeAgent {
.declareGauge(MetricReceiverWrapper.APPLICATION_DOCKER, dimensions, "node.disk.limit").sample(diskGB * bytesInGB));
storageMaintainer.ifPresent(maintainer -> maintainer
- .updateIfNeededAndGetDiskMetricsFor(nodeSpec.containerName)
+ .updateIfNeededAndGetDiskMetricsFor(containerName)
.forEach((metricName, metricValue) ->
metricReceiver.declareGauge(MetricReceiverWrapper.APPLICATION_DOCKER, dimensions, metricName).sample(metricValue.doubleValue())));
@@ -563,6 +563,14 @@ public class NodeAgentImpl implements NodeAgent {
}
}
+ public String getHostname() {
+ return hostname;
+ }
+
+ public ContainerName getContainerName() {
+ return containerName;
+ }
+
@Override
public boolean isDownloadingImage() {
return imageBeingDownloaded != null;
@@ -577,7 +585,7 @@ public class NodeAgentImpl implements NodeAgent {
private void configureContainerMetrics(ContainerNodeSpec nodeSpec) {
if (! storageMaintainer.isPresent()) return;
- final Path yamasAgentFolder = environment.pathInNodeAdminFromPathInNode(nodeSpec.containerName, "/etc/yamas-agent/");
+ final Path yamasAgentFolder = environment.pathInNodeAdminFromPathInNode(containerName, "/etc/yamas-agent/");
Path vespaCheckPath = Paths.get(getDefaults().underVespaHome("libexec/yms/yms_check_vespa"));
SecretAgentScheduleMaker scheduleMaker = new SecretAgentScheduleMaker("vespa", 60, vespaCheckPath, "all")
@@ -603,9 +611,9 @@ public class NodeAgentImpl implements NodeAgent {
try {
scheduleMaker.writeTo(yamasAgentFolder);
final String[] restartYamasAgent = new String[] {"service" , "yamas-agent", "restart"};
- dockerOperations.executeCommandInContainerAsRoot(nodeSpec.containerName, restartYamasAgent);
+ dockerOperations.executeCommandInContainerAsRoot(containerName, restartYamasAgent);
} catch (IOException e) {
- throw new RuntimeException("Failed to write secret-agent schedules for " + nodeSpec.containerName, e);
+ throw new RuntimeException("Failed to write secret-agent schedules for " + containerName, e);
}
}
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/CallOrderVerifier.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/CallOrderVerifier.java
index e9dde8f93cd..572ceb6d2a0 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/CallOrderVerifier.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/CallOrderVerifier.java
@@ -20,7 +20,7 @@ import static org.junit.Assert.assertTrue;
* @author freva
*/
public class CallOrderVerifier {
- private static final int waitForCallOrderTimeout = 60000; //ms
+ private static final int waitForCallOrderTimeout = 600; //ms
private final LinkedList<String> callOrder = new LinkedList<>();
private final Object monitor = new Object();
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 06f8079172d..11a01c10f1b 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
@@ -17,9 +17,8 @@ public class DockerFailTest {
public void dockerFailTest() throws Exception {
try (DockerTester dockerTester = new DockerTester()) {
ContainerNodeSpec containerNodeSpec = new ContainerNodeSpec.Builder()
- .hostname("hostName")
+ .hostname("host1.test.yahoo.com")
.wantedDockerImage(new DockerImage("dockerImage"))
- .containerName(new ContainerName("container"))
.nodeState(Node.State.active)
.nodeType("tenant")
.nodeFlavor("docker")
@@ -35,15 +34,15 @@ public class DockerFailTest {
CallOrderVerifier callOrderVerifier = dockerTester.getCallOrderVerifier();
callOrderVerifier.assertInOrder(
- "createContainerCommand with DockerImage { imageId=dockerImage }, HostName: hostName, ContainerName { name=container }",
- "executeInContainerAsRoot with ContainerName { name=container }, args: [" + DockerOperationsImpl.NODE_PROGRAM + ", resume]");
+ "createContainerCommand with DockerImage { imageId=dockerImage }, HostName: host1.test.yahoo.com, ContainerName { name=host1 }",
+ "executeInContainerAsRoot with ContainerName { name=host1 }, args: [" + DockerOperationsImpl.NODE_PROGRAM + ", resume]");
- dockerTester.deleteContainer(containerNodeSpec.containerName);
+ dockerTester.deleteContainer(new ContainerName("host1"));
callOrderVerifier.assertInOrder(
- "deleteContainer with ContainerName { name=container }",
- "createContainerCommand with DockerImage { imageId=dockerImage }, HostName: hostName, ContainerName { name=container }",
- "executeInContainerAsRoot with ContainerName { name=container }, args: [" + DockerOperationsImpl.NODE_PROGRAM + ", resume]");
+ "deleteContainer with ContainerName { name=host1 }",
+ "createContainerCommand with DockerImage { imageId=dockerImage }, HostName: host1.test.yahoo.com, ContainerName { name=host1 }",
+ "executeInContainerAsRoot with ContainerName { name=host1 }, args: [" + DockerOperationsImpl.NODE_PROGRAM + ", resume]");
}
}
}
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 aef03327645..5f1fa19666f 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
@@ -14,9 +14,11 @@ import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgent;
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.admin.util.PathResolver;
import java.net.InetAddress;
import java.net.UnknownHostException;
+import java.nio.file.Paths;
import java.util.Optional;
import java.util.function.Function;
@@ -46,7 +48,9 @@ public class DockerTester implements AutoCloseable {
throw new RuntimeException(e);
}
- Environment environment = new Environment.Builder().inetAddressResolver(inetAddressResolver).build();
+ Environment environment = new Environment.Builder()
+ .inetAddressResolver(inetAddressResolver)
+ .pathResolver(new PathResolver(Paths.get("/tmp"), Paths.get("/tmp"))).build();
callOrderVerifier = new CallOrderVerifier();
orchestratorMock = new OrchestratorMock(callOrderVerifier);
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 582df7d22f6..d827ac1b517 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
@@ -18,9 +18,9 @@ public class MultiDockerTest {
@Test
public void test() throws InterruptedException, IOException {
try (DockerTester dockerTester = new DockerTester()) {
- addAndWaitForNode(dockerTester, "host1", new ContainerName("container1"), new DockerImage("image1"));
+ addAndWaitForNode(dockerTester, "host1.test.yahoo.com", new DockerImage("image1"));
ContainerNodeSpec containerNodeSpec2 =
- addAndWaitForNode(dockerTester, "host2", new ContainerName("container2"), new DockerImage("image2"));
+ addAndWaitForNode(dockerTester, "host2.test.yahoo.com", new DockerImage("image2"));
dockerTester.updateContainerNodeSpec(
new ContainerNodeSpec.Builder(containerNodeSpec2)
@@ -33,39 +33,38 @@ public class MultiDockerTest {
Thread.sleep(10);
}
- addAndWaitForNode(dockerTester, "host3", new ContainerName("container3"), new DockerImage("image1"));
+ addAndWaitForNode(dockerTester, "host3.test.yahoo.com", new DockerImage("image1"));
CallOrderVerifier callOrderVerifier = dockerTester.getCallOrderVerifier();
callOrderVerifier.assertInOrder(
- "createContainerCommand with DockerImage { imageId=image1 }, HostName: host1, ContainerName { name=container1 }",
- "executeInContainerAsRoot with ContainerName { name=container1 }, args: [" + DockerOperationsImpl.NODE_PROGRAM + ", resume]",
+ "createContainerCommand with DockerImage { imageId=image1 }, HostName: host1.test.yahoo.com, ContainerName { name=host1 }",
+ "executeInContainerAsRoot with ContainerName { name=host1 }, args: [" + DockerOperationsImpl.NODE_PROGRAM + ", resume]",
- "createContainerCommand with DockerImage { imageId=image2 }, HostName: host2, ContainerName { name=container2 }",
- "executeInContainerAsRoot with ContainerName { name=container2 }, args: [" + DockerOperationsImpl.NODE_PROGRAM + ", resume]",
+ "createContainerCommand with DockerImage { imageId=image2 }, HostName: host2.test.yahoo.com, ContainerName { name=host2 }",
+ "executeInContainerAsRoot with ContainerName { name=host2 }, args: [" + DockerOperationsImpl.NODE_PROGRAM + ", resume]",
- "stopContainer with ContainerName { name=container2 }",
- "deleteContainer with ContainerName { name=container2 }",
+ "stopContainer with ContainerName { name=host2 }",
+ "deleteContainer with ContainerName { name=host2 }",
- "createContainerCommand with DockerImage { imageId=image1 }, HostName: host3, ContainerName { name=container3 }",
- "executeInContainerAsRoot with ContainerName { name=container3 }, args: [" + DockerOperationsImpl.NODE_PROGRAM + ", resume]");
+ "createContainerCommand with DockerImage { imageId=image1 }, HostName: host3.test.yahoo.com, ContainerName { name=host3 }",
+ "executeInContainerAsRoot with ContainerName { name=host3 }, args: [" + DockerOperationsImpl.NODE_PROGRAM + ", resume]");
callOrderVerifier.assertInOrderWithAssertMessage("Maintainer did not receive call to delete application storage",
- "deleteContainer with ContainerName { name=container2 }",
- "DeleteContainerStorage with ContainerName { name=container2 }");
+ "deleteContainer with ContainerName { name=host2 }",
+ "DeleteContainerStorage with ContainerName { name=host2 }");
callOrderVerifier.assertInOrder(
- "updateNodeAttributes with HostName: host1, NodeAttributes{restartGeneration=1, rebootGeneration=0, dockerImage=image1, vespaVersion=''}",
- "updateNodeAttributes with HostName: host2, NodeAttributes{restartGeneration=1, rebootGeneration=0, dockerImage=image2, vespaVersion=''}",
- "markAsReady with HostName: host2",
- "updateNodeAttributes with HostName: host3, NodeAttributes{restartGeneration=1, rebootGeneration=0, dockerImage=image1, vespaVersion=''}");
+ "updateNodeAttributes with HostName: host1.test.yahoo.com, NodeAttributes{restartGeneration=1, rebootGeneration=0, dockerImage=image1, vespaVersion=''}",
+ "updateNodeAttributes with HostName: host2.test.yahoo.com, NodeAttributes{restartGeneration=1, rebootGeneration=0, dockerImage=image2, vespaVersion=''}",
+ "markAsReady with HostName: host2.test.yahoo.com",
+ "updateNodeAttributes with HostName: host3.test.yahoo.com, NodeAttributes{restartGeneration=1, rebootGeneration=0, dockerImage=image1, vespaVersion=''}");
}
}
- private ContainerNodeSpec addAndWaitForNode(DockerTester tester, String hostName, ContainerName containerName, DockerImage dockerImage) throws InterruptedException {
+ private ContainerNodeSpec addAndWaitForNode(DockerTester tester, String hostName, DockerImage dockerImage) throws InterruptedException {
ContainerNodeSpec containerNodeSpec = new ContainerNodeSpec.Builder()
.hostname(hostName)
.wantedDockerImage(dockerImage)
- .containerName(containerName)
.nodeState(Node.State.active)
.nodeType("tenant")
.nodeFlavor("docker")
@@ -80,6 +79,7 @@ public class MultiDockerTest {
Thread.sleep(10);
}
+ ContainerName containerName = ContainerName.fromHostname(hostName);
tester.getCallOrderVerifier().assertInOrder(
"createContainerCommand with " + dockerImage + ", HostName: " + hostName + ", " + containerName,
"executeInContainerAsRoot with " + containerName + ", args: [" + DockerOperationsImpl.NODE_PROGRAM + ", resume]");
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 222d46658eb..187bfa22195 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
@@ -2,7 +2,6 @@
package com.yahoo.vespa.hosted.node.admin.integrationTests;
import com.yahoo.vespa.hosted.node.admin.ContainerNodeSpec;
-import com.yahoo.vespa.hosted.dockerapi.ContainerName;
import com.yahoo.vespa.hosted.dockerapi.DockerImage;
import com.yahoo.vespa.hosted.node.admin.docker.DockerOperationsImpl;
import com.yahoo.vespa.hosted.provision.Node;
@@ -17,9 +16,8 @@ import java.io.IOException;
*/
public class NodeStateTest {
private final ContainerNodeSpec initialContainerNodeSpec = new ContainerNodeSpec.Builder()
- .hostname("host1")
+ .hostname("host1.test.yahoo.com")
.wantedDockerImage(new DockerImage("dockerImage"))
- .containerName(new ContainerName("container"))
.nodeState(Node.State.active)
.nodeType("tenant")
.nodeFlavor("docker")
@@ -36,8 +34,8 @@ public class NodeStateTest {
}
tester.getCallOrderVerifier().assertInOrder(
- "createContainerCommand with DockerImage { imageId=dockerImage }, HostName: host1, ContainerName { name=container }",
- "executeInContainerAsRoot with ContainerName { name=container }, args: [" + DockerOperationsImpl.NODE_PROGRAM + ", resume]");
+ "createContainerCommand with DockerImage { imageId=dockerImage }, HostName: host1.test.yahoo.com, ContainerName { name=host1 }",
+ "executeInContainerAsRoot with ContainerName { name=host1 }, args: [" + DockerOperationsImpl.NODE_PROGRAM + ", resume]");
}
@@ -57,9 +55,9 @@ public class NodeStateTest {
}
dockerTester.getCallOrderVerifier()
- .assertInOrder("executeInContainerAsRoot with ContainerName { name=container }, args: [" + DockerOperationsImpl.NODE_PROGRAM + ", stop]",
- "stopContainer with ContainerName { name=container }",
- "deleteContainer with ContainerName { name=container }");
+ .assertInOrder("executeInContainerAsRoot with ContainerName { name=host1 }, args: [" + DockerOperationsImpl.NODE_PROGRAM + ", stop]",
+ "stopContainer with ContainerName { name=host1 }",
+ "deleteContainer with ContainerName { name=host1 }");
}
}
@@ -79,8 +77,8 @@ public class NodeStateTest {
CallOrderVerifier callOrderVerifier = dockerTester.getCallOrderVerifier();
callOrderVerifier.assertInOrderWithAssertMessage("Node set to inactive, but no stop/delete call received",
- "stopContainer with ContainerName { name=container }",
- "deleteContainer with ContainerName { name=container }");
+ "stopContainer with ContainerName { name=host1 }",
+ "deleteContainer with ContainerName { name=host1 }");
// Change node state to active
@@ -91,9 +89,9 @@ public class NodeStateTest {
// Check that the container is started again after the delete call
callOrderVerifier.assertInOrderWithAssertMessage("Node not started again after being put to active state",
- "deleteContainer with ContainerName { name=container }",
- "createContainerCommand with DockerImage { imageId=newDockerImage }, HostName: host1, ContainerName { name=container }",
- "executeInContainerAsRoot with ContainerName { name=container }, args: [" + DockerOperationsImpl.NODE_PROGRAM + ", resume]");
+ "deleteContainer with ContainerName { name=host1 }",
+ "createContainerCommand with DockerImage { imageId=newDockerImage }, HostName: host1.test.yahoo.com, ContainerName { name=host1 }",
+ "executeInContainerAsRoot with ContainerName { name=host1 }, args: [" + DockerOperationsImpl.NODE_PROGRAM + ", resume]");
}
}
}
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 59e945a4fb8..c2bff95c8d1 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
@@ -1,7 +1,6 @@
// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.hosted.node.admin.integrationTests;
-import com.yahoo.vespa.hosted.dockerapi.ContainerName;
import com.yahoo.vespa.hosted.dockerapi.DockerImage;
import com.yahoo.vespa.hosted.node.admin.ContainerNodeSpec;
import com.yahoo.vespa.hosted.node.admin.docker.DockerOperationsImpl;
@@ -39,8 +38,8 @@ public class RebootTest {
CallOrderVerifier callOrderVerifier = dockerTester.getCallOrderVerifier();
// Check that the container is started and NodeRepo has received the PATCH update
- callOrderVerifier.assertInOrder("createContainerCommand with DockerImage { imageId=dockerImage }, HostName: host1, ContainerName { name=container }",
- "updateNodeAttributes with HostName: host1, NodeAttributes{restartGeneration=1, rebootGeneration=null, dockerImage=dockerImage, vespaVersion='null'}");
+ callOrderVerifier.assertInOrder("createContainerCommand with DockerImage { imageId=dockerImage }, HostName: host1.test.yahoo.com, ContainerName { name=host1 }",
+ "updateNodeAttributes with HostName: host1.test.yahoo.com, NodeAttributes{restartGeneration=1, rebootGeneration=null, dockerImage=dockerImage, vespaVersion='null'}");
NodeAdminStateUpdater updater = dockerTester.getNodeAdminStateUpdater();
assertThat(updater.setResumeStateAndCheckIfResumed(NodeAdminStateUpdater.State.SUSPENDED),
@@ -57,15 +56,14 @@ public class RebootTest {
assertTrue(nodeAdmin.freezeNodeAgentsAndCheckIfAllFrozen());
- callOrderVerifier.assertInOrder("executeInContainer with ContainerName { name=container }, args: [" + DockerOperationsImpl.NODE_PROGRAM + ", stop]");
+ callOrderVerifier.assertInOrder("executeInContainer with ContainerName { name=host1 }, args: [" + DockerOperationsImpl.NODE_PROGRAM + ", stop]");
}
}
private ContainerNodeSpec createContainerNodeSpec() {
return new ContainerNodeSpec.Builder()
- .hostname("host1")
+ .hostname("host1.test.yahoo.com")
.wantedDockerImage(new DockerImage("dockerImage"))
- .containerName(new ContainerName("container"))
.nodeState(Node.State.active)
.nodeType("tenant")
.nodeFlavor("docker")
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 c945f2d84f6..d7fd753fabe 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
@@ -1,7 +1,6 @@
// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.hosted.node.admin.integrationTests;
-import com.yahoo.vespa.hosted.dockerapi.ContainerName;
import com.yahoo.vespa.hosted.dockerapi.DockerImage;
import com.yahoo.vespa.hosted.node.admin.ContainerNodeSpec;
import com.yahoo.vespa.hosted.node.admin.docker.DockerOperationsImpl;
@@ -32,23 +31,22 @@ public class RestartTest {
CallOrderVerifier callOrderVerifier = dockerTester.getCallOrderVerifier();
// Check that the container is started and NodeRepo has received the PATCH update
- callOrderVerifier.assertInOrder("createContainerCommand with DockerImage { imageId=image:1.2.3 }, HostName: host1, ContainerName { name=container }",
- "updateNodeAttributes with HostName: host1, NodeAttributes{restartGeneration=1, rebootGeneration=0, dockerImage=image:1.2.3, vespaVersion=''}");
+ 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=''}");
wantedRestartGeneration = 2;
currentRestartGeneration = 1;
dockerTester.updateContainerNodeSpec(createContainerNodeSpec(wantedRestartGeneration, currentRestartGeneration));
- callOrderVerifier.assertInOrder("Suspend for host1",
- "executeInContainerAsRoot with ContainerName { name=container }, args: [" + DockerOperationsImpl.NODE_PROGRAM + ", restart-vespa]");
+ callOrderVerifier.assertInOrder("Suspend for host1.test.yahoo.com",
+ "executeInContainerAsRoot with ContainerName { name=host1 }, args: [" + DockerOperationsImpl.NODE_PROGRAM + ", restart-vespa]");
}
}
private ContainerNodeSpec createContainerNodeSpec(long wantedRestartGeneration, long currentRestartGeneration) {
return new ContainerNodeSpec.Builder()
- .hostname("host1")
+ .hostname("host1.test.yahoo.com")
.wantedDockerImage(new DockerImage("image:1.2.3"))
- .containerName(new ContainerName("container"))
.nodeState(Node.State.active)
.nodeType("tenant")
.nodeFlavor("docker")
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 b3209d9a050..6292c07bd04 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
@@ -4,7 +4,6 @@ package com.yahoo.vespa.hosted.node.admin.integrationTests;
import com.yahoo.vespa.hosted.node.admin.ContainerNodeSpec;
import com.yahoo.vespa.hosted.node.admin.nodeadmin.NodeAdmin;
import com.yahoo.vespa.hosted.node.admin.nodeadmin.NodeAdminStateUpdater;
-import com.yahoo.vespa.hosted.dockerapi.ContainerName;
import com.yahoo.vespa.hosted.dockerapi.DockerImage;
import com.yahoo.vespa.hosted.provision.Node;
import org.junit.Test;
@@ -29,9 +28,8 @@ public class ResumeTest {
final NodeAdminStateUpdater nodeAdminStateUpdater = dockerTester.getNodeAdminStateUpdater();
dockerTester.addContainerNodeSpec(new ContainerNodeSpec.Builder()
- .hostname("host1")
+ .hostname("host1.test.yahoo.com")
.wantedDockerImage(new DockerImage("dockerImage"))
- .containerName(new ContainerName("container"))
.nodeState(Node.State.active)
.nodeType("tenant")
.nodeFlavor("docker")
@@ -47,8 +45,8 @@ public class ResumeTest {
CallOrderVerifier callOrderVerifier = dockerTester.getCallOrderVerifier();
// Check that the container is started and NodeRepo has received the PATCH update
- callOrderVerifier.assertInOrder("createContainerCommand with DockerImage { imageId=dockerImage }, HostName: host1, ContainerName { name=container }",
- "updateNodeAttributes with HostName: host1, NodeAttributes{restartGeneration=1, rebootGeneration=0, dockerImage=dockerImage, vespaVersion=''}");
+ callOrderVerifier.assertInOrder("createContainerCommand with DockerImage { imageId=dockerImage }, HostName: host1.test.yahoo.com, ContainerName { name=host1 }",
+ "updateNodeAttributes with HostName: host1.test.yahoo.com, NodeAttributes{restartGeneration=1, rebootGeneration=0, dockerImage=dockerImage, vespaVersion=''}");
// Force orchestrator to reject the suspend
orchestratorMock.setForceGroupSuspendResponse(Optional.of("Orchestrator reject suspend"));
@@ -80,9 +78,9 @@ public class ResumeTest {
Thread.sleep(10);
}
- callOrderVerifier.assertInOrder("Resume for host1",
- "Suspend with parent: basehostname and hostnames: [host1] - Forced response: Optional[Orchestrator reject suspend]",
- "Suspend with parent: basehostname and hostnames: [host1] - Forced response: Optional.empty");
+ callOrderVerifier.assertInOrder("Resume for host1.test.yahoo.com",
+ "Suspend with parent: basehostname and hostnames: [host1.test.yahoo.com] - Forced response: Optional[Orchestrator reject suspend]",
+ "Suspend with parent: basehostname and hostnames: [host1.test.yahoo.com] - Forced response: Optional.empty");
}
}
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 c4a3788b33f..5f445079d8e 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
@@ -3,7 +3,6 @@ package com.yahoo.vespa.hosted.node.admin.integrationTests;
import com.yahoo.application.Networking;
import com.yahoo.application.container.JDisc;
-import com.yahoo.vespa.hosted.dockerapi.ContainerName;
import com.yahoo.vespa.hosted.dockerapi.DockerImage;
import com.yahoo.vespa.hosted.node.admin.ContainerNodeSpec;
import com.yahoo.vespa.hosted.provision.Node;
@@ -111,9 +110,8 @@ public class RunInContainerTest {
ComponentsProviderWithMocks.nodeRepositoryMock
.addContainerNodeSpec(new ContainerNodeSpec.Builder()
- .hostname("hostName")
+ .hostname("host1.test.yahoo.com")
.wantedDockerImage(new DockerImage("dockerImage"))
- .containerName(new ContainerName("container"))
.nodeState(Node.State.active)
.nodeType("tenant")
.nodeFlavor("docker")
@@ -123,7 +121,7 @@ public class RunInContainerTest {
ComponentsProviderWithMocks.orchestratorMock.setForceGroupSuspendResponse(Optional.of("Denied"));
assertThat(doPutCall("suspend"), is(false));
ComponentsProviderWithMocks.callOrderVerifier
- .assertInOrder("Suspend with parent: localhost and hostnames: [hostName] - Forced response: Optional[Denied]");
+ .assertInOrder("Suspend with parent: localhost and hostnames: [host1.test.yahoo.com] - Forced response: Optional[Denied]");
assertThat(doGetInfoCall(), is("{\"dockerHostHostName\":\"localhost\",\"NodeAdmin\":{\"isFrozen\":true,\"NodeAgents\":[]}}"));
}
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/StorageMaintainerMock.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/StorageMaintainerMock.java
index 6107ca74752..c67b6a0e7e5 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/StorageMaintainerMock.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/StorageMaintainerMock.java
@@ -29,7 +29,7 @@ public class StorageMaintainerMock extends StorageMaintainer {
}
@Override
- public void handleCoreDumpsForContainer(ContainerNodeSpec nodeSpec, Environment environment) {
+ public void handleCoreDumpsForContainer(ContainerName containerName, ContainerNodeSpec nodeSpec, Environment environment) {
}
@Override
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/AclMaintainerTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/AclMaintainerTest.java
index d10c2a4c9a3..fde8009bdd3 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/AclMaintainerTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/AclMaintainerTest.java
@@ -150,16 +150,17 @@ public class AclMaintainerTest {
}
private Container makeContainer(String hostname, Container.State state, int pid) {
+ final ContainerName containerName = new ContainerName(hostname);
final Container container = new Container(hostname, new DockerImage("mock"),
- new ContainerName(hostname), state, pid);
- when(dockerOperations.getContainer(eq(hostname))).thenReturn(Optional.of(container));
+ containerName, state, pid);
+ when(dockerOperations.getContainer(eq(containerName))).thenReturn(Optional.of(container));
return container;
}
private static List<ContainerAclSpec> makeAclSpecs(int count, ContainerName containerName) {
return IntStream.rangeClosed(1, count)
.mapToObj(i -> new ContainerAclSpec("node-" + i, "::" + i,
- containerName.asString()))
+ containerName))
.collect(Collectors.toList());
}
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 17f70ce5efa..4b663c9865d 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
@@ -57,14 +57,13 @@ public class NodeAdminImplTest {
final NodeAgent nodeAgent2 = mock(NodeAgentImpl.class);
when(nodeAgentFactory.apply(any(String.class))).thenReturn(nodeAgent1).thenReturn(nodeAgent2);
- final String hostName = "host";
+ final String hostName = "host1.test.yahoo.com";
final DockerImage dockerImage = new DockerImage("image");
- final ContainerName containerName = new ContainerName("container");
+ final ContainerName containerName = new ContainerName("host1");
final Container existingContainer = new Container(hostName, dockerImage, containerName, Container.State.RUNNING, 5);
final ContainerNodeSpec nodeSpec = new ContainerNodeSpec.Builder()
.hostname(hostName)
.wantedDockerImage(dockerImage)
- .containerName(containerName)
.nodeState(Node.State.active)
.nodeType("tenant")
.nodeFlavor("docker")
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterTest.java
index 556f417c648..1f99eeae949 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterTest.java
@@ -3,13 +3,11 @@ package com.yahoo.vespa.hosted.node.admin.nodeadmin;
import com.yahoo.prelude.semantics.RuleBaseException;
import com.yahoo.vespa.hosted.node.admin.ContainerNodeSpec;
-import com.yahoo.vespa.hosted.dockerapi.ContainerName;
import com.yahoo.vespa.hosted.node.admin.integrationTests.CallOrderVerifier;
import com.yahoo.vespa.hosted.node.admin.integrationTests.OrchestratorMock;
import com.yahoo.vespa.hosted.node.admin.noderepository.NodeRepository;
import com.yahoo.vespa.hosted.provision.Node;
import org.junit.Test;
-import org.mockito.stubbing.Answer;
import java.util.ArrayList;
import java.util.Collections;
@@ -35,7 +33,7 @@ public class NodeAdminStateUpdaterTest {
NodeAdmin nodeAdmin = mock(NodeAdmin.class);
final List<ContainerNodeSpec> accumulatedArgumentList = Collections.synchronizedList(new ArrayList<>());
doAnswer(
- (Answer<Void>) invocation -> {
+ invocation -> {
List<ContainerNodeSpec> containersToRunInArgument = (List<ContainerNodeSpec>) invocation.getArguments()[0];
containersToRunInArgument.forEach(accumulatedArgumentList::add);
if (accumulatedArgumentList.size() == 2) {
@@ -83,8 +81,7 @@ public class NodeAdminStateUpdaterTest {
private ContainerNodeSpec createSample() {
return new ContainerNodeSpec.Builder()
- .hostname("hostName")
- .containerName(new ContainerName("containerName"))
+ .hostname("host1.test.yahoo.com")
.nodeState(Node.State.active)
.nodeType("tenant")
.nodeFlavor("docker")
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 5ef0c9f0d61..baf69167296 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
@@ -51,7 +51,8 @@ public class NodeAgentImplTest {
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 String hostName = "host1.test.yahoo.com";
+ private final ContainerName containerName = new ContainerName("host1");
private final DockerOperations dockerOperations = mock(DockerOperations.class);
private final NodeRepository nodeRepository = mock(NodeRepository.class);
private final Orchestrator orchestrator = mock(Orchestrator.class);
@@ -74,11 +75,9 @@ public class NodeAgentImplTest {
final long restartGeneration = 1;
final long rebootGeneration = 0;
final DockerImage dockerImage = new DockerImage("dockerImage");
- final ContainerName containerName = new ContainerName("container-name");
final ContainerNodeSpec nodeSpec = new ContainerNodeSpec.Builder()
.hostname(hostName)
.wantedDockerImage(dockerImage)
- .containerName(containerName)
.nodeState(Node.State.active)
.nodeType("tenant")
.nodeFlavor("docker")
@@ -92,11 +91,11 @@ public class NodeAgentImplTest {
.build();
Docker.ContainerStats containerStats = new ContainerStatsImpl(new HashMap<>(), new HashMap<>(), new HashMap<>(), new HashMap<>());
- when(dockerOperations.getContainer(eq(hostName))).thenReturn(
+ when(dockerOperations.getContainer(eq(containerName))).thenReturn(
Optional.of(new Container(hostName, dockerImage, containerName, Container.State.RUNNING, 1)));
when(dockerOperations.getContainerStats(any())).thenReturn(Optional.of(containerStats));
when(dockerOperations.shouldScheduleDownloadOfImage(any())).thenReturn(false);
- when(dockerOperations.startContainerIfNeeded(eq(nodeSpec))).thenReturn(false);
+ when(dockerOperations.startContainerIfNeeded(eq(containerName), eq(nodeSpec))).thenReturn(false);
when(nodeRepository.getContainerNodeSpec(hostName)).thenReturn(Optional.of(nodeSpec));
nodeAgent.vespaVersion = nodeSpec.vespaVersion;
@@ -105,7 +104,7 @@ public class NodeAgentImplTest {
verify(dockerOperations, never()).removeContainer(any(), any());
verify(orchestrator, never()).suspend(any(String.class));
- verify(dockerOperations, never()).scheduleDownloadOfImage(any(), any());
+ verify(dockerOperations, never()).scheduleDownloadOfImage(eq(containerName), any(), any());
final InOrder inOrder = inOrder(dockerOperations, orchestrator, nodeRepository);
// TODO: Verify this isn't run unless 1st time
@@ -126,11 +125,9 @@ public class NodeAgentImplTest {
final long restartGeneration = 1;
final long rebootGeneration = 0;
final DockerImage dockerImage = new DockerImage("dockerImage");
- final ContainerName containerName = new ContainerName("container-name");
final ContainerNodeSpec nodeSpec = new ContainerNodeSpec.Builder()
.hostname(hostName)
.wantedDockerImage(dockerImage)
- .containerName(containerName)
.nodeState(Node.State.active)
.nodeType("tenant")
.nodeFlavor("docker")
@@ -143,10 +140,10 @@ public class NodeAgentImplTest {
.minDiskAvailableGb(MIN_DISK_AVAILABLE_GB)
.build();
- when(dockerOperations.getContainer(eq(hostName))).thenReturn(Optional.empty());
+ when(dockerOperations.getContainer(eq(containerName))).thenReturn(Optional.empty());
when(dockerOperations.getContainerStats(eq(containerName))).thenReturn(Optional.empty());
when(dockerOperations.shouldScheduleDownloadOfImage(any())).thenReturn(false);
- when(dockerOperations.startContainerIfNeeded(eq(nodeSpec))).thenReturn(true);
+ when(dockerOperations.startContainerIfNeeded(eq(containerName), eq(nodeSpec))).thenReturn(true);
when(dockerOperations.getVespaVersion(eq(containerName))).thenReturn(Optional.of(vespaVersion));
when(pathResolver.getApplicationStoragePathForNodeAdmin()).thenReturn(Files.createTempDirectory("foo"));
when(nodeRepository.getContainerNodeSpec(hostName)).thenReturn(Optional.of(nodeSpec));
@@ -155,7 +152,7 @@ public class NodeAgentImplTest {
verify(dockerOperations, never()).removeContainer(any(), any());
verify(orchestrator, never()).suspend(any(String.class));
- verify(dockerOperations, never()).scheduleDownloadOfImage(any(), any());
+ verify(dockerOperations, never()).scheduleDownloadOfImage(eq(containerName), any(), any());
final InOrder inOrder = inOrder(dockerOperations, orchestrator, nodeRepository);
inOrder.verify(dockerOperations, times(1)).resumeNode(eq(containerName));
@@ -170,7 +167,6 @@ public class NodeAgentImplTest {
@Test
public void containerIsNotStoppedIfNewImageMustBePulled() throws Exception {
- final ContainerName containerName = new ContainerName("container");
final DockerImage oldDockerImage = new DockerImage("old-image");
final DockerImage newDockerImage = new DockerImage("new-image");
final long wantedRestartGeneration = 2;
@@ -178,7 +174,6 @@ public class NodeAgentImplTest {
final ContainerNodeSpec nodeSpec = new ContainerNodeSpec.Builder()
.hostname(hostName)
.wantedDockerImage(newDockerImage)
- .containerName(containerName)
.nodeState(Node.State.active)
.nodeType("tenant")
.nodeFlavor("docker")
@@ -191,7 +186,7 @@ public class NodeAgentImplTest {
when(dockerOperations.shouldScheduleDownloadOfImage(any())).thenReturn(true);
when(nodeRepository.getContainerNodeSpec(hostName)).thenReturn(Optional.of(nodeSpec));
- when(dockerOperations.getContainer(eq(hostName))).thenReturn(
+ when(dockerOperations.getContainer(eq(containerName))).thenReturn(
Optional.of(new Container(hostName, oldDockerImage, containerName, Container.State.RUNNING, 1)));
nodeAgent.tick();
@@ -202,7 +197,7 @@ public class NodeAgentImplTest {
final InOrder inOrder = inOrder(dockerOperations);
inOrder.verify(dockerOperations, times(1)).shouldScheduleDownloadOfImage(eq(newDockerImage));
- inOrder.verify(dockerOperations, times(1)).scheduleDownloadOfImage(eq(nodeSpec), any());
+ inOrder.verify(dockerOperations, times(1)).scheduleDownloadOfImage(eq(containerName), eq(nodeSpec), any());
}
@Test
@@ -210,11 +205,9 @@ public class NodeAgentImplTest {
final long wantedRestartGeneration = 2;
final long currentRestartGeneration = 1;
final DockerImage dockerImage = new DockerImage("dockerImage");
- final ContainerName containerName = new ContainerName("container-name");
final ContainerNodeSpec nodeSpec = new ContainerNodeSpec.Builder()
.hostname(hostName)
.wantedDockerImage(dockerImage)
- .containerName(containerName)
.nodeState(Node.State.active)
.nodeType("tenant")
.nodeFlavor("docker")
@@ -232,7 +225,7 @@ public class NodeAgentImplTest {
fail("Expected to throw an exception");
} catch (Exception ignored) { }
- verify(dockerOperations, never()).startContainerIfNeeded(eq(nodeSpec));
+ verify(dockerOperations, never()).startContainerIfNeeded(eq(containerName), eq(nodeSpec));
verify(orchestrator, never()).resume(any(String.class));
verify(nodeRepository, never()).updateNodeAttributes(any(String.class), any(NodeAttributes.class));
}
@@ -242,10 +235,8 @@ public class NodeAgentImplTest {
final long restartGeneration = 1;
final long rebootGeneration = 0;
final DockerImage dockerImage = new DockerImage("dockerImage");
- final ContainerName containerName = new ContainerName("container-name");
final ContainerNodeSpec nodeSpec = new ContainerNodeSpec.Builder()
.hostname(hostName)
- .containerName(containerName)
.nodeState(Node.State.failed)
.nodeType("tenant")
.nodeFlavor("docker")
@@ -257,7 +248,7 @@ public class NodeAgentImplTest {
.build();
when(nodeRepository.getContainerNodeSpec(hostName)).thenReturn(Optional.of(nodeSpec));
- when(dockerOperations.getContainer(eq(hostName))).thenReturn(
+ when(dockerOperations.getContainer(eq(containerName))).thenReturn(
Optional.of(new Container(hostName, dockerImage, containerName, Container.State.RUNNING, 1)));
nodeAgent.vespaVersion = nodeSpec.vespaVersion;
@@ -279,10 +270,8 @@ public class NodeAgentImplTest {
final long restartGeneration = 1;
final long rebootGeneration = 0;
final DockerImage dockerImage = new DockerImage("dockerImage");
- final ContainerName containerName = new ContainerName("container-name");
final ContainerNodeSpec nodeSpec = new ContainerNodeSpec.Builder()
.hostname(hostName)
- .containerName(containerName)
.nodeState(Node.State.ready)
.nodeType("tenant")
.nodeFlavor("docker")
@@ -295,7 +284,7 @@ public class NodeAgentImplTest {
.build();
when(nodeRepository.getContainerNodeSpec(hostName)).thenReturn(Optional.of(nodeSpec));
- when(dockerOperations.getContainer(eq(hostName))).thenReturn(
+ when(dockerOperations.getContainer(eq(containerName))).thenReturn(
Optional.of(new Container(hostName, dockerImage, containerName, Container.State.RUNNING, 1)));
nodeAgent.vespaVersion = nodeSpec.vespaVersion;
@@ -303,7 +292,7 @@ public class NodeAgentImplTest {
nodeAgent.tick();
verify(dockerOperations, never()).removeContainer(any(), any());
- verify(dockerOperations, never()).startContainerIfNeeded(eq(nodeSpec));
+ verify(dockerOperations, never()).startContainerIfNeeded(eq(containerName), eq(nodeSpec));
verify(orchestrator, never()).resume(any(String.class));
verify(nodeRepository).updateNodeAttributes(
hostName, new NodeAttributes()
@@ -318,10 +307,8 @@ public class NodeAgentImplTest {
final long restartGeneration = 1;
final long rebootGeneration = 0;
final DockerImage dockerImage = new DockerImage("dockerImage");
- final ContainerName containerName = new ContainerName("container-name");
final ContainerNodeSpec nodeSpec = new ContainerNodeSpec.Builder()
.hostname(hostName)
- .containerName(containerName)
.nodeState(Node.State.inactive)
.nodeType("tenant")
.nodeFlavor("docker")
@@ -334,7 +321,7 @@ public class NodeAgentImplTest {
.build();
when(nodeRepository.getContainerNodeSpec(hostName)).thenReturn(Optional.of(nodeSpec));
- when(dockerOperations.getContainer(eq(hostName))).thenReturn(
+ when(dockerOperations.getContainer(eq(containerName))).thenReturn(
Optional.of(new Container(hostName, dockerImage, containerName, Container.State.RUNNING, 1)));
nodeAgent.vespaVersion = nodeSpec.vespaVersion;
@@ -356,11 +343,9 @@ public class NodeAgentImplTest {
private ContainerNodeSpec makeContainer(Node.State nodeState, Optional<Long> wantedRestartGeneration) {
final DockerImage dockerImage = new DockerImage("dockerImage");
- final ContainerName containerName = new ContainerName("container-name");
final ContainerNodeSpec.Builder nodeSpecBuilder = new ContainerNodeSpec.Builder()
.hostname(hostName)
.wantedDockerImage(dockerImage)
- .containerName(containerName)
.nodeState(nodeState)
.nodeType("tenant")
.nodeFlavor("docker")
@@ -376,7 +361,7 @@ public class NodeAgentImplTest {
boolean shouldBeRunning = nodeState != Node.State.dirty && nodeState != Node.State.provisioned;
when(nodeRepository.getContainerNodeSpec(hostName)).thenReturn(Optional.of(nodeSpec));
- when(dockerOperations.getContainer(eq(hostName))).thenReturn(
+ when(dockerOperations.getContainer(eq(containerName))).thenReturn(
Optional.of(new Container(hostName,
dockerImage,
containerName,
@@ -388,7 +373,6 @@ public class NodeAgentImplTest {
private void nodeRunningContainerIsTakenDownAndCleanedAndRecycled(Node.State nodeState, Optional<Long> wantedRestartGeneration)
throws Exception {
final ContainerNodeSpec nodeSpec = makeContainer(nodeState, wantedRestartGeneration);
- final ContainerName containerName = nodeSpec.containerName;
nodeAgent.tick();
@@ -398,7 +382,7 @@ public class NodeAgentImplTest {
inOrder.verify(storageMaintainer, times(1)).archiveNodeData(eq(containerName));
inOrder.verify(nodeRepository, times(1)).markAsReady(eq(hostName));
- verify(dockerOperations, never()).startContainerIfNeeded(any());
+ verify(dockerOperations, never()).startContainerIfNeeded(eq(containerName), any());
verify(orchestrator, never()).resume(any(String.class));
// current Docker image and vespa version should be cleared
verify(nodeRepository, times(1)).updateNodeAttributes(
@@ -429,13 +413,10 @@ public class NodeAgentImplTest {
@Test
public void resumeProgramRunsUntilSuccess() throws Exception {
final long restartGeneration = 1;
- final String hostName = "hostname";
final DockerImage wantedDockerImage = new DockerImage("wantedDockerImage");
- final ContainerName containerName = new ContainerName("container-name");
final ContainerNodeSpec nodeSpec = new ContainerNodeSpec.Builder()
.hostname(hostName)
.wantedDockerImage(wantedDockerImage)
- .containerName(containerName)
.nodeState(Node.State.active)
.nodeType("tenant")
.nodeFlavor("docker")
@@ -448,7 +429,7 @@ public class NodeAgentImplTest {
Docker.ContainerStats containerStats = new ContainerStatsImpl(new HashMap<>(), new HashMap<>(), new HashMap<>(), new HashMap<>());
when(dockerOperations.getContainerStats(any())).thenReturn(Optional.of(containerStats));
- when(dockerOperations.getContainer(eq(hostName))).thenReturn(
+ when(dockerOperations.getContainer(eq(containerName))).thenReturn(
Optional.of(new Container(hostName, wantedDockerImage, containerName, Container.State.RUNNING, 1)));
when(nodeRepository.getContainerNodeSpec(eq(hostName))).thenReturn(Optional.of(nodeSpec));
when(dockerOperations.shouldScheduleDownloadOfImage(eq(wantedDockerImage))).thenReturn(false);
@@ -493,10 +474,9 @@ public class NodeAgentImplTest {
Map<String, Object> blkio_stats = (Map<String, Object>) dockerStats.get("blkio_stats");
Docker.ContainerStats stats = new ContainerStatsImpl(networks, cpu_stats, memory_stats, blkio_stats);
- final ContainerName containerName = new ContainerName("cont-name");
when(dockerOperations.getContainerStats(eq(containerName))).thenReturn(Optional.of(stats));
- when(dockerOperations.getContainer(eq(hostName))).thenReturn(
+ when(dockerOperations.getContainer(eq(containerName))).thenReturn(
Optional.of(new Container(hostName, new DockerImage("wantedDockerImage"), containerName, Container.State.RUNNING, 1)));
nodeAgent.vespaVersion = Optional.of("1.2.3");
@@ -504,7 +484,6 @@ public class NodeAgentImplTest {
ContainerNodeSpec.Membership membership = new ContainerNodeSpec.Membership("clustType", "clustId", "grp", 3, false);
nodeAgent.lastNodeSpec = new ContainerNodeSpec.Builder()
.hostname(hostName)
- .containerName(containerName)
.nodeState(Node.State.active)
.nodeType("tenant")
.nodeFlavor("docker")
diff --git a/node-admin/src/test/resources/docker.stats.metrics.expected.json b/node-admin/src/test/resources/docker.stats.metrics.expected.json
index a4b3c921334..0845f5acb82 100644
--- a/node-admin/src/test/resources/docker.stats.metrics.expected.json
+++ b/node-admin/src/test/resources/docker.stats.metrics.expected.json
@@ -11,7 +11,7 @@
"role": "tenants",
"tenantName": "tester",
"zone": "dev.us-east-1",
- "host": "hostname",
+ "host": "host1.test.yahoo.com",
"vespaVersion": "1.2.3",
"state": "active",
"clusterid": "clustId",
@@ -39,7 +39,7 @@
"clustertype":"clustType",
"role":"tenants",
"tenantName":"tester",
- "host":"hostname",
+ "host":"host1.test.yahoo.com",
"vespaVersion":"1.2.3",
"state":"active",
"clusterid":"clustId",
@@ -68,7 +68,7 @@
"clustertype":"clustType",
"role":"tenants",
"tenantName":"tester",
- "host":"hostname",
+ "host":"host1.test.yahoo.com",
"vespaVersion":"1.2.3",
"state":"active",
"clusterid":"clustId",
@@ -99,7 +99,7 @@
"clustertype":"clustType",
"role":"tenants",
"tenantName":"tester",
- "host":"hostname",
+ "host":"host1.test.yahoo.com",
"vespaVersion":"1.2.3",
"state":"active",
"clusterid":"clustId",