diff options
author | Harald Musum <musum@yahoo-inc.com> | 2016-10-11 14:06:58 +0200 |
---|---|---|
committer | Harald Musum <musum@yahoo-inc.com> | 2016-10-11 14:06:58 +0200 |
commit | 3ea2d4b457dcade764569e99ac8b3daba8605bf4 (patch) | |
tree | 9df3f310602070cfe2d077d88499c4a3de4644ab /node-admin | |
parent | c5bacb886099a071f0625e7c143555e49764ef7f (diff) |
Refactor DockerOperationsImpl
* Move metrics stuff to NodeAgentImpl
Diffstat (limited to 'node-admin')
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"; + } + } } |