summaryrefslogtreecommitdiffstats
path: root/node-admin
diff options
context:
space:
mode:
authorHarald Musum <musum@yahoo-inc.com>2016-10-11 14:06:58 +0200
committerHarald Musum <musum@yahoo-inc.com>2016-10-11 14:06:58 +0200
commit3ea2d4b457dcade764569e99ac8b3daba8605bf4 (patch)
tree9df3f310602070cfe2d077d88499c4a3de4644ab /node-admin
parentc5bacb886099a071f0625e7c143555e49764ef7f (diff)
Refactor DockerOperationsImpl
* Move metrics stuff to NodeAgentImpl
Diffstat (limited to 'node-admin')
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperations.java2
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java46
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java51
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/provider/ComponentsProviderImpl.java8
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/ComponentsProviderWithMocks.java9
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerFailTest.java5
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/MultiDockerTest.java5
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/NodeStateTest.java5
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RestartTest.java5
-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/nodeagent/NodeAgentImplTest.java20
11 files changed, 105 insertions, 57 deletions
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 a753d7b564c..4865d3b410a 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
@@ -24,6 +24,8 @@ public interface DockerOperations {
void scheduleDownloadOfImage(ContainerNodeSpec nodeSpec, Runnable callback);
+ void executeCommand(ContainerName containerName, String[] command);
+
void executeResume(ContainerName containerName);
Docker.ContainerStats getContainerStats(ContainerName containerName);
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 b6c41ce2439..2d200c7c703 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
@@ -15,17 +15,13 @@ 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;
import com.yahoo.vespa.hosted.node.admin.util.PrefixLogger;
-import com.yahoo.vespa.hosted.node.admin.util.SecretAgentScheduleMaker;
import com.yahoo.vespa.hosted.node.maintenance.Maintainer;
import com.yahoo.vespa.hosted.provision.Node;
-import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.UnknownHostException;
-import java.nio.file.Path;
-import java.nio.file.Paths;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedList;
@@ -116,47 +112,12 @@ public class DockerOperationsImpl implements DockerOperations {
// Returns true if started
@Override
public boolean startContainerIfNeeded(final ContainerNodeSpec nodeSpec) {
- final Optional<Container> existingContainer = docker.getContainer(nodeSpec.hostname);
- if (!existingContainer.isPresent()) {
- startContainer(nodeSpec);
- configureContainer(nodeSpec);
- return true;
- } else {
- return false;
- }
- }
-
- private void configureContainer(ContainerNodeSpec nodeSpec) {
- final Path yamasAgentFolder = maintainer.pathInNodeAdminFromPathInNode(nodeSpec.containerName, "/etc/yamas-agent/");
-
- Path vespaCheckPath = Paths.get("/home/y/libexec/yms/yms_check_vespa");
- SecretAgentScheduleMaker scheduleMaker = new SecretAgentScheduleMaker("vespa", 60, vespaCheckPath, "all")
- .withTag("role", "tenants")
- .withTag("flavor", nodeSpec.nodeFlavor)
- .withTag("state", nodeSpec.nodeState.toString())
- .withTag("zone", environment.getZone());
-
- if (nodeSpec.owner.isPresent()) scheduleMaker
- .withTag("tenantName", nodeSpec.owner.get().tenant)
- .withTag("app", nodeSpec.owner.get().application);
+ if (docker.getContainer(nodeSpec.hostname).isPresent()) return false;
- if (nodeSpec.membership.isPresent()) scheduleMaker
- .withTag("clustertype", nodeSpec.membership.get().clusterType)
- .withTag("clusterid", nodeSpec.membership.get().clusterId);
-
- if (nodeSpec.vespaVersion.isPresent()) scheduleMaker
- .withTag("vespaVersion", nodeSpec.vespaVersion.get());
-
- try {
- scheduleMaker.writeTo(yamasAgentFolder);
- } catch (IOException e) {
- throw new RuntimeException("Failed to write secret-agent schedules for " + nodeSpec.containerName, e);
- }
-
- docker.executeInContainer(nodeSpec.containerName, "service", "yamas-agent", "restart");
+ startContainer(nodeSpec);
+ return true;
}
-
// Returns true if scheduling download
@Override
public boolean shouldScheduleDownloadOfImage(final DockerImage dockerImage) {
@@ -428,6 +389,7 @@ public class DockerOperationsImpl implements DockerOperations {
}
}
+ @Override
public void executeCommand(ContainerName containerName, String[] command) {
Optional<ProcessResult> result = executeOptionalProgram(containerName, command);
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 aaeefb0f620..850ce1e2d97 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,10 +11,15 @@ 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.util.Environment;
import com.yahoo.vespa.hosted.node.admin.util.PrefixLogger;
+import com.yahoo.vespa.hosted.node.admin.util.SecretAgentScheduleMaker;
+import com.yahoo.vespa.hosted.node.maintenance.Maintainer;
import com.yahoo.vespa.hosted.provision.Node;
import java.io.IOException;
+import java.nio.file.Path;
+import java.nio.file.Paths;
import java.text.SimpleDateFormat;
import java.time.Duration;
import java.time.Instant;
@@ -25,6 +30,7 @@ import java.util.Map;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicBoolean;
+import static com.yahoo.vespa.defaults.Defaults.getDefaults;
import static com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentImpl.ContainerState.ABSENT;
import static com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentImpl.ContainerState.RUNNING;
import static com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentImpl.ContainerState.RUNNING_HOWEVER_RESUME_SCRIPT_NOT_RUN;
@@ -51,6 +57,9 @@ public class NodeAgentImpl implements NodeAgent {
private final Orchestrator orchestrator;
private final DockerOperations dockerOperations;
private final StorageMaintainer storageMaintainer;
+ private final MetricReceiverWrapper metricReceiver;
+ private final Environment environment;
+ private final Maintainer maintainer;
private final Object monitor = new Object();
@@ -73,7 +82,6 @@ public class NodeAgentImpl implements NodeAgent {
private NodeAttributes lastAttributesSet = null;
ContainerNodeSpec lastNodeSpec = null;
- private final MetricReceiverWrapper metricReceiver;
public NodeAgentImpl(
final String hostName,
@@ -81,7 +89,9 @@ public class NodeAgentImpl implements NodeAgent {
final Orchestrator orchestrator,
final DockerOperations dockerOperations,
final StorageMaintainer storageMaintainer,
- final MetricReceiverWrapper metricReceiver) {
+ final MetricReceiverWrapper metricReceiver,
+ final Environment environment,
+ final Maintainer maintainer) {
this.nodeRepository = nodeRepository;
this.orchestrator = orchestrator;
this.hostname = hostName;
@@ -89,8 +99,9 @@ public class NodeAgentImpl implements NodeAgent {
this.storageMaintainer = storageMaintainer;
this.logger = PrefixLogger.getNodeAgentLogger(NodeAgentImpl.class,
NodeRepositoryImpl.containerNameFromHostName(hostName));
-
this.metricReceiver = metricReceiver;
+ this.environment = environment;
+ this.maintainer = maintainer;
}
@Override
@@ -214,6 +225,7 @@ public class NodeAgentImpl implements NodeAgent {
private void startContainerIfNeeded(final ContainerNodeSpec nodeSpec) {
if (dockerOperations.startContainerIfNeeded(nodeSpec)) {
+ configureContainerMetrics(nodeSpec);
addDebugMessage("startContainerIfNeeded: containerState " + containerState + " -> " +
RUNNING_HOWEVER_RESUME_SCRIPT_NOT_RUN);
containerState = RUNNING_HOWEVER_RESUME_SCRIPT_NOT_RUN;
@@ -243,7 +255,7 @@ public class NodeAgentImpl implements NodeAgent {
imageBeingDownloaded = nodeSpec.wantedDockerImage.get();
// Create a signalWorkToBeDone when download is finished.
dockerOperations.scheduleDownloadOfImage(nodeSpec, this::signalWorkToBeDone);
- } else if (imageBeingDownloaded != null) { // Image was downloading, but now its ready
+ } else if (imageBeingDownloaded != null) { // Image was downloading, but now it's ready
imageBeingDownloaded = null;
}
}
@@ -439,4 +451,35 @@ public class NodeAgentImpl implements NodeAgent {
numberOfUnhandledException = 0;
return temp;
}
+
+ private void configureContainerMetrics(ContainerNodeSpec nodeSpec) {
+ final Path yamasAgentFolder = maintainer.pathInNodeAdminFromPathInNode(nodeSpec.containerName, "/etc/yamas-agent/");
+
+ Path vespaCheckPath = Paths.get(getDefaults().underVespaHome("libexec/yms/yms_check_vespa"));
+ SecretAgentScheduleMaker scheduleMaker = new SecretAgentScheduleMaker("vespa", 60, vespaCheckPath, "all")
+ .withTag("role", "tenants")
+ .withTag("flavor", nodeSpec.nodeFlavor)
+ .withTag("state", nodeSpec.nodeState.toString())
+ .withTag("zone", environment.getZone());
+
+ if (nodeSpec.owner.isPresent()) scheduleMaker
+ .withTag("tenantName", nodeSpec.owner.get().tenant)
+ .withTag("app", nodeSpec.owner.get().application);
+
+ if (nodeSpec.membership.isPresent()) scheduleMaker
+ .withTag("clustertype", nodeSpec.membership.get().clusterType)
+ .withTag("clusterid", nodeSpec.membership.get().clusterId);
+
+ if (nodeSpec.vespaVersion.isPresent()) scheduleMaker
+ .withTag("vespaVersion", nodeSpec.vespaVersion.get());
+
+ try {
+ scheduleMaker.writeTo(yamasAgentFolder);
+ } catch (IOException e) {
+ throw new RuntimeException("Failed to write secret-agent schedules for " + nodeSpec.containerName, e);
+ }
+ final String[] restartYamasAgent = new String[] {"service" , "yamas-agent", "restart"};
+ dockerOperations.executeCommand(nodeSpec.containerName, restartYamasAgent);
+ }
+
}
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/provider/ComponentsProviderImpl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/provider/ComponentsProviderImpl.java
index b6d94bb0557..6568af9fde2 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/provider/ComponentsProviderImpl.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/provider/ComponentsProviderImpl.java
@@ -18,6 +18,7 @@ import com.yahoo.vespa.hosted.node.admin.orchestrator.Orchestrator;
import com.yahoo.vespa.hosted.node.admin.orchestrator.OrchestratorImpl;
import com.yahoo.vespa.hosted.node.admin.util.Environment;
import com.yahoo.vespa.hosted.node.admin.util.SecretAgentScheduleMaker;
+import com.yahoo.vespa.hosted.node.maintenance.Maintainer;
import java.io.IOException;
import java.nio.file.Path;
@@ -54,8 +55,11 @@ public class ComponentsProviderImpl implements ComponentsProvider {
NodeRepository nodeRepository = new NodeRepositoryImpl(configServerHosts, WEB_SERVICE_PORT, baseHostName);
StorageMaintainer storageMaintainer = new StorageMaintainer();
- final Function<String, NodeAgent> nodeAgentFactory = (hostName) -> new NodeAgentImpl(hostName, nodeRepository,
- orchestrator, new DockerOperationsImpl(docker, environment), storageMaintainer, metricReceiver);
+ final Function<String, NodeAgent> nodeAgentFactory =
+ (hostName) -> new NodeAgentImpl(hostName, nodeRepository,
+ orchestrator, new DockerOperationsImpl(docker, environment),
+ storageMaintainer, metricReceiver,
+ environment, new Maintainer());
final NodeAdmin nodeAdmin = new NodeAdminImpl(docker, nodeAgentFactory, storageMaintainer,
NODE_AGENT_SCAN_INTERVAL_MILLIS, metricReceiver);
nodeAdminStateUpdater = new NodeAdminStateUpdater(
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/ComponentsProviderWithMocks.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/ComponentsProviderWithMocks.java
index 7ded32227bb..51fbbe0afe0 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/ComponentsProviderWithMocks.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/ComponentsProviderWithMocks.java
@@ -12,6 +12,7 @@ import com.yahoo.vespa.hosted.dockerapi.Docker;
import com.yahoo.vespa.hosted.node.admin.docker.DockerOperationsImpl;
import com.yahoo.vespa.hosted.node.admin.provider.ComponentsProvider;
import com.yahoo.vespa.hosted.node.admin.util.Environment;
+import com.yahoo.vespa.hosted.node.maintenance.Maintainer;
import java.util.function.Function;
@@ -29,8 +30,12 @@ public class ComponentsProviderWithMocks implements ComponentsProvider {
private Environment environment = new Environment();
private final MetricReceiverWrapper mr = new MetricReceiverWrapper(MetricReceiver.nullImplementation);
- private final Function<String, NodeAgent> nodeAgentFactory = (hostName) -> new NodeAgentImpl(hostName,
- nodeRepositoryMock, orchestratorMock, new DockerOperationsImpl(dockerMock, environment), maintenanceSchedulerMock, mr);
+ private final Function<String, NodeAgent> nodeAgentFactory =
+ (hostName) -> new NodeAgentImpl(hostName,
+ nodeRepositoryMock, orchestratorMock,
+ new DockerOperationsImpl(dockerMock, environment),
+ maintenanceSchedulerMock, mr,
+ new Environment(), new Maintainer());
private NodeAdmin nodeAdmin = new NodeAdminImpl(dockerMock, nodeAgentFactory, maintenanceSchedulerMock, 100, mr);
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 00e64ed947d..347e67046ac 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
@@ -14,6 +14,7 @@ import com.yahoo.vespa.hosted.node.admin.nodeadmin.NodeAdminStateUpdater;
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.maintenance.Maintainer;
import com.yahoo.vespa.hosted.provision.Node;
import org.junit.After;
import org.junit.Before;
@@ -51,7 +52,9 @@ public class DockerFailTest {
MetricReceiverWrapper mr = new MetricReceiverWrapper(MetricReceiver.nullImplementation);
Function<String, NodeAgent> nodeAgentFactory = (hostName) ->
- new NodeAgentImpl(hostName, nodeRepositoryMock, orchestratorMock, new DockerOperationsImpl(dockerMock, environment), maintenanceSchedulerMock, mr);
+ new NodeAgentImpl(hostName, nodeRepositoryMock, orchestratorMock,
+ new DockerOperationsImpl(dockerMock, environment),
+ maintenanceSchedulerMock, mr, new Environment(), new Maintainer());
NodeAdmin nodeAdmin = new NodeAdminImpl(dockerMock, nodeAgentFactory, maintenanceSchedulerMock, 100, mr);
initialContainerNodeSpec = new 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 1896e46dd00..77fac7f7953 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
@@ -13,6 +13,7 @@ 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.docker.DockerOperationsImpl;
import com.yahoo.vespa.hosted.node.admin.util.Environment;
+import com.yahoo.vespa.hosted.node.maintenance.Maintainer;
import com.yahoo.vespa.hosted.provision.Node;
import org.junit.After;
import org.junit.Before;
@@ -53,7 +54,9 @@ public class MultiDockerTest {
MetricReceiverWrapper mr = new MetricReceiverWrapper(MetricReceiver.nullImplementation);
Function<String, NodeAgent> nodeAgentFactory = (hostName) ->
- new NodeAgentImpl(hostName, nodeRepositoryMock, orchestratorMock, new DockerOperationsImpl(dockerMock, environment), maintenanceSchedulerMock, mr);
+ new NodeAgentImpl(hostName, nodeRepositoryMock, orchestratorMock,
+ new DockerOperationsImpl(dockerMock, environment),
+ maintenanceSchedulerMock, mr, new Environment(), new Maintainer());
nodeAdmin = new NodeAdminImpl(dockerMock, nodeAgentFactory, maintenanceSchedulerMock, 100, mr);
updater = new NodeAdminStateUpdater(nodeRepositoryMock, nodeAdmin, 1, 1, orchestratorMock, "basehostname");
}
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 45c8dfc5634..f28061942f3 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
@@ -13,6 +13,7 @@ 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.docker.DockerOperationsImpl;
import com.yahoo.vespa.hosted.node.admin.util.Environment;
+import com.yahoo.vespa.hosted.node.maintenance.Maintainer;
import com.yahoo.vespa.hosted.provision.Node;
import org.junit.After;
import org.junit.Before;
@@ -58,7 +59,9 @@ public class NodeStateTest {
MetricReceiverWrapper mr = new MetricReceiverWrapper(MetricReceiver.nullImplementation);
Function<String, NodeAgent> nodeAgentFactory = (hostName) ->
- new NodeAgentImpl(hostName, nodeRepositoryMock, orchestratorMock, new DockerOperationsImpl(dockerMock, environment), maintenanceSchedulerMock, mr);
+ new NodeAgentImpl(hostName, nodeRepositoryMock, orchestratorMock,
+ new DockerOperationsImpl(dockerMock, environment),
+ maintenanceSchedulerMock, mr, new Environment(), new Maintainer());
NodeAdmin nodeAdmin = new NodeAdminImpl(dockerMock, nodeAgentFactory, maintenanceSchedulerMock, 100, mr);
initialContainerNodeSpec = new ContainerNodeSpec(
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 21078ba61d7..0c2d3b6d6db 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
@@ -13,6 +13,7 @@ import com.yahoo.vespa.hosted.node.admin.nodeadmin.NodeAdminStateUpdater;
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.maintenance.Maintainer;
import com.yahoo.vespa.hosted.provision.Node;
import org.junit.Test;
@@ -47,7 +48,9 @@ public class RestartTest {
MetricReceiverWrapper mr = new MetricReceiverWrapper(MetricReceiver.nullImplementation);
Function<String, NodeAgent> nodeAgentFactory = (hostName) ->
- new NodeAgentImpl(hostName, nodeRepositoryMock, orchestratorMock, new DockerOperationsImpl(dockerMock, environment), maintenanceSchedulerMock, mr);
+ new NodeAgentImpl(hostName, nodeRepositoryMock, orchestratorMock,
+ new DockerOperationsImpl(dockerMock, environment),
+ maintenanceSchedulerMock, mr, new Environment(), new Maintainer());
NodeAdmin nodeAdmin = new NodeAdminImpl(dockerMock, nodeAgentFactory, maintenanceSchedulerMock, 100, mr);
long wantedRestartGeneration = 1;
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 e7397e36b75..9ad0fbb4605 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
@@ -13,6 +13,7 @@ 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.node.admin.util.Environment;
+import com.yahoo.vespa.hosted.node.maintenance.Maintainer;
import com.yahoo.vespa.hosted.provision.Node;
import org.junit.Test;
@@ -24,7 +25,6 @@ import java.util.function.Function;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -49,7 +49,9 @@ public class ResumeTest {
MetricReceiverWrapper mr = new MetricReceiverWrapper(MetricReceiver.nullImplementation);
Function<String, NodeAgent> nodeAgentFactory = (hostName) ->
- new NodeAgentImpl(hostName, nodeRepositoryMock, orchestratorMock, new DockerOperationsImpl(dockerMock, environment), maintenanceSchedulerMock, mr);
+ new NodeAgentImpl(hostName, nodeRepositoryMock, orchestratorMock,
+ new DockerOperationsImpl(dockerMock, environment),
+ maintenanceSchedulerMock, mr, new Environment(), new Maintainer());
NodeAdmin nodeAdmin = new NodeAdminImpl(dockerMock, nodeAgentFactory, maintenanceSchedulerMock, 100, mr);
nodeRepositoryMock.addContainerNodeSpec(new ContainerNodeSpec(
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 3d56704781d..7f7217e1641 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
@@ -14,12 +14,15 @@ 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.orchestrator.Orchestrator;
import com.yahoo.vespa.hosted.node.admin.orchestrator.OrchestratorException;
+import com.yahoo.vespa.hosted.node.admin.util.Environment;
+import com.yahoo.vespa.hosted.node.maintenance.Maintainer;
import com.yahoo.vespa.hosted.provision.Node;
import org.junit.Test;
import org.mockito.InOrder;
import java.io.File;
import java.io.IOException;
+import java.nio.file.Files;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
@@ -52,10 +55,12 @@ public class NodeAgentImplTest {
private final NodeRepository nodeRepository = mock(NodeRepository.class);
private final Orchestrator orchestrator = mock(Orchestrator.class);
private final StorageMaintainer storageMaintainer = mock(StorageMaintainer.class);
+ private final Maintainer maintainer = mock(Maintainer.class);
private final MetricReceiverWrapper metricReceiver = new MetricReceiverWrapper(MetricReceiver.nullImplementation);
+
private final NodeAgentImpl nodeAgent = new NodeAgentImpl(hostName, nodeRepository, orchestrator, dockerOperations,
- storageMaintainer, metricReceiver);
+ storageMaintainer, metricReceiver, new MockEnvironment(), maintainer);
@Test
public void upToDateContainerIsUntouched() throws Exception {
@@ -131,6 +136,7 @@ public class NodeAgentImplTest {
when(dockerOperations.removeContainerIfNeeded(eq(nodeSpec), eq(hostName), any())).thenReturn(true);
when(dockerOperations.startContainerIfNeeded(eq(nodeSpec))).thenReturn(true);
when(dockerOperations.getVespaVersion(eq(containerName))).thenReturn(vespaVersion);
+ when(maintainer.pathInNodeAdminFromPathInNode(any(ContainerName.class), any(String.class))).thenReturn(Files.createTempDirectory("foo"));
when(nodeRepository.getContainerNodeSpec(hostName)).thenReturn(Optional.of(nodeSpec));
nodeAgent.tick();
@@ -425,4 +431,16 @@ public class NodeAgentImplTest {
assertEquals(expectedMetrics, actualMetrics);
}
+
+ private class MockEnvironment extends Environment {
+ @Override
+ public String getEnvironment() {
+ return "dev";
+ }
+
+ @Override
+ public String getRegion() {
+ return "us-east";
+ }
+ }
}