diff options
author | Håkon Hallingstad <hakon@yahoo-inc.com> | 2016-09-01 12:48:01 +0200 |
---|---|---|
committer | Håkon Hallingstad <hakon@yahoo-inc.com> | 2016-09-01 12:48:01 +0200 |
commit | 990fb7cc457ba96219700cedea87f5c11777ce52 (patch) | |
tree | fa44ad5035891867a573abe4166066b0f2f76d00 /node-admin | |
parent | c8d9fb3e150cfdcffd14d96df0040c0c6a616736 (diff) |
Make node-admin use docker-api bundle
Diffstat (limited to 'node-admin')
12 files changed, 66 insertions, 63 deletions
diff --git a/node-admin/src/main/application/services.xml b/node-admin/src/main/application/services.xml index 39ca1e23d9a..62d4c574975 100644 --- a/node-admin/src/main/application/services.xml +++ b/node-admin/src/main/application/services.xml @@ -6,7 +6,7 @@ <binding>http://*/rest/*</binding> </handler> <component id="node-admin" class="com.yahoo.vespa.hosted.node.admin.provider.ComponentsProviderImpl" bundle="node-admin"/> - <component id="docker" class="com.yahoo.vespa.hosted.dockerapi.DockerImpl" bundle="node-admin"/> + <component id="docker-api" class="com.yahoo.vespa.hosted.dockerapi.DockerImpl" bundle="docker-api"/> <config name='nodeadmin.docker.docker'> <caCertPath>/host/docker/certs/ca_cert.pem</caCertPath> diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/DockerOperationsInterface.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperations.java index 8606efc854f..f6440518875 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/DockerOperationsInterface.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperations.java @@ -1,5 +1,5 @@ // 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.nodeagent; +package com.yahoo.vespa.hosted.node.admin.docker; import com.yahoo.vespa.applicationmodel.HostName; import com.yahoo.vespa.hosted.dockerapi.ContainerName; @@ -7,19 +7,19 @@ import com.yahoo.vespa.hosted.dockerapi.DockerImage; import com.yahoo.vespa.hosted.node.admin.ContainerNodeSpec; import com.yahoo.vespa.hosted.node.admin.orchestrator.Orchestrator; -public interface DockerOperationsInterface { +public interface DockerOperations { String getVespaVersionOrNull(ContainerName containerName); // Returns true if started boolean startContainerIfNeeded(ContainerNodeSpec nodeSpec); - // Returns true if scheduling download + // Returns false if image is already downloaded boolean shouldScheduleDownloadOfImage(DockerImage dockerImage); boolean removeContainerIfNeeded(ContainerNodeSpec nodeSpec, HostName hostname, Orchestrator orchestrator) throws Exception; - void startContainer(ContainerNodeSpec nodeSpec); + void scheduleDownloadOfImage(ContainerNodeSpec nodeSpec, Runnable callback); void executeResume(ContainerName containerName); } diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/DockerOperations.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java index 71f0a7ee588..4d59bd13318 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/DockerOperations.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java @@ -1,5 +1,5 @@ // 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.nodeagent; +package com.yahoo.vespa.hosted.node.admin.docker; import com.google.common.base.Joiner; import com.google.common.io.CharStreams; @@ -37,7 +37,7 @@ import static com.yahoo.vespa.defaults.Defaults.getDefaults; * Class that wraps the Docker class and have some tools related to running programs in docker. * @author dybis */ -public class DockerOperations implements DockerOperationsInterface { +public class DockerOperationsImpl implements DockerOperations { static final String NODE_PROGRAM = Defaults.getDefaults().vespaHome() + "bin/vespa-nodectl"; public static final String[] GET_VESPA_VERSION_COMMAND = new String[]{NODE_PROGRAM, "vespa-version"}; @@ -67,18 +67,18 @@ public class DockerOperations implements DockerOperationsInterface { private final Docker docker; - public DockerOperations(Docker docker) { + public DockerOperationsImpl(Docker docker) { this.docker = docker; } @Override public String getVespaVersionOrNull(ContainerName containerName) { - PrefixLogger logger = PrefixLogger.getNodeAgentLogger(DockerOperations.class, containerName); + PrefixLogger logger = PrefixLogger.getNodeAgentLogger(DockerOperationsImpl.class, containerName); - ProcessResult result = docker.executeInContainer(containerName, DockerOperations.GET_VESPA_VERSION_COMMAND); + ProcessResult result = docker.executeInContainer(containerName, DockerOperationsImpl.GET_VESPA_VERSION_COMMAND); if (!result.isSuccess()) { logger.warning("Container " + containerName.asString() + ": Command " - + Arrays.toString(DockerOperations.GET_VESPA_VERSION_COMMAND) + " failed: " + result); + + Arrays.toString(DockerOperationsImpl.GET_VESPA_VERSION_COMMAND) + " failed: " + result); return null; } Optional<String> vespaVersion = parseVespaVersion(result.getOutput()); @@ -126,7 +126,7 @@ public class DockerOperations implements DockerOperationsInterface { } Optional<String> removeReason = shouldRemoveContainer(nodeSpec, existingContainer); if (removeReason.isPresent()) { - PrefixLogger logger = PrefixLogger.getNodeAgentLogger(DockerOperations.class, nodeSpec.containerName); + PrefixLogger logger = PrefixLogger.getNodeAgentLogger(DockerOperationsImpl.class, nodeSpec.containerName); logger.info("Will remove container " + existingContainer.get() + ": " + removeReason.get()); removeContainer(nodeSpec, existingContainer.get(), orchestrator); return true; @@ -178,7 +178,7 @@ public class DockerOperations implements DockerOperationsInterface { * Any failures are logged and ignored. */ private void trySuspendNode(ContainerName containerName) { - PrefixLogger logger = PrefixLogger.getNodeAgentLogger(DockerOperations.class, containerName); + PrefixLogger logger = PrefixLogger.getNodeAgentLogger(DockerOperationsImpl.class, containerName); Optional<ProcessResult> result; try { @@ -198,9 +198,8 @@ public class DockerOperations implements DockerOperationsInterface { } } - @Override - public void startContainer(final ContainerNodeSpec nodeSpec) { - PrefixLogger logger = PrefixLogger.getNodeAgentLogger(DockerOperations.class, nodeSpec.containerName); + void startContainer(final ContainerNodeSpec nodeSpec) { + PrefixLogger logger = PrefixLogger.getNodeAgentLogger(DockerOperationsImpl.class, nodeSpec.containerName); logger.info("Starting container " + nodeSpec.containerName); try { @@ -255,7 +254,7 @@ public class DockerOperations implements DockerOperationsInterface { private void setupContainerIPv4Networking(ContainerName containerName, HostName hostName, String ipAddress) { - PrefixLogger logger = PrefixLogger.getNodeAgentLogger(DockerOperations.class, containerName); + PrefixLogger logger = PrefixLogger.getNodeAgentLogger(DockerOperationsImpl.class, containerName); Docker.ContainerInfo containerInfo = docker.inspectContainer(containerName); Optional<Integer> containerPid = containerInfo.getPid(); @@ -305,8 +304,9 @@ public class DockerOperations implements DockerOperationsInterface { } } - void scheduleDownloadOfImage(final ContainerNodeSpec nodeSpec, Runnable callback) { - PrefixLogger logger = PrefixLogger.getNodeAgentLogger(DockerOperations.class, nodeSpec.containerName); + @Override + public void scheduleDownloadOfImage(final ContainerNodeSpec nodeSpec, Runnable callback) { + PrefixLogger logger = PrefixLogger.getNodeAgentLogger(DockerOperationsImpl.class, nodeSpec.containerName); logger.info("Schedule async download of Docker image " + nodeSpec.wantedDockerImage.get()); final CompletableFuture<DockerImage> asyncPullResult = docker.pullImageAsync(nodeSpec.wantedDockerImage.get()); @@ -324,7 +324,7 @@ public class DockerOperations implements DockerOperationsInterface { private void removeContainer(final ContainerNodeSpec nodeSpec, final Container existingContainer, Orchestrator orchestrator) throws Exception { - PrefixLogger logger = PrefixLogger.getNodeAgentLogger(DockerOperations.class, nodeSpec.containerName); + PrefixLogger logger = PrefixLogger.getNodeAgentLogger(DockerOperationsImpl.class, nodeSpec.containerName); final ContainerName containerName = existingContainer.name; if (existingContainer.isRunning) { // If we're stopping the node only to upgrade or restart the node or similar, we need to suspend 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 76aa629c76c..fff9950a96f 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 @@ -2,8 +2,9 @@ package com.yahoo.vespa.hosted.node.admin.nodeagent; import com.yahoo.vespa.applicationmodel.HostName; -import com.yahoo.vespa.hosted.node.admin.ContainerNodeSpec; import com.yahoo.vespa.hosted.dockerapi.DockerImage; +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.MaintenanceScheduler; import com.yahoo.vespa.hosted.node.admin.noderepository.NodeRepository; import com.yahoo.vespa.hosted.node.admin.noderepository.NodeRepositoryImpl; @@ -12,12 +13,12 @@ import com.yahoo.vespa.hosted.node.admin.util.PrefixLogger; import java.io.IOException; import java.text.SimpleDateFormat; +import java.time.Duration; +import java.time.Instant; import java.util.Date; import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.Map; -import java.time.Duration; -import java.time.Instant; import java.util.concurrent.atomic.AtomicBoolean; import static com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentImpl.ContainerState.ABSENT; 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 bf2f12e0884..09ae4906cb6 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 @@ -10,7 +10,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.dockerapi.Docker; -import com.yahoo.vespa.hosted.node.admin.nodeagent.DockerOperations; +import com.yahoo.vespa.hosted.node.admin.docker.DockerOperationsImpl; 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; @@ -52,7 +52,7 @@ public class ComponentsProviderImpl implements ComponentsProvider { MaintenanceScheduler maintenanceScheduler = new MaintenanceSchedulerImpl(); final Function<HostName, NodeAgent> nodeAgentFactory = (hostName) -> - new NodeAgentImpl(hostName, nodeRepository, orchestrator, new DockerOperations(docker), maintenanceScheduler); + new NodeAgentImpl(hostName, nodeRepository, orchestrator, new DockerOperationsImpl(docker), maintenanceScheduler); final NodeAdmin nodeAdmin = new NodeAdminImpl(docker, nodeAgentFactory, maintenanceScheduler, NODE_AGENT_SCAN_INTERVAL_MILLIS); nodeAdminStateUpdater = new NodeAdminStateUpdater( nodeRepository, nodeAdmin, INITIAL_SCHEDULER_DELAY_MILLIS, NODE_ADMIN_STATE_INTERVAL_MILLIS, orchestrator, baseHostName); diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/DockerOperationsTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImplTest.java index 8f3850dc569..4b2ef6d83e0 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/DockerOperationsTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImplTest.java @@ -1,9 +1,10 @@ // 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.nodeagent; +package com.yahoo.vespa.hosted.node.admin.docker; import com.yahoo.vespa.hosted.dockerapi.ContainerName; import com.yahoo.vespa.hosted.dockerapi.Docker; import com.yahoo.vespa.hosted.dockerapi.ProcessResult; +import com.yahoo.vespa.hosted.node.admin.docker.DockerOperationsImpl; import org.hamcrest.CoreMatchers; import org.junit.Test; import org.mockito.InOrder; @@ -21,9 +22,9 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -public class DockerOperationsTest { +public class DockerOperationsImplTest { private final Docker docker = mock(Docker.class); - private final DockerOperations dockerOperations = new DockerOperations(docker); + private final DockerOperationsImpl dockerOperations = new DockerOperationsImpl(docker); @Test public void absenceOfNodeProgramIsSuccess() throws Exception { @@ -88,36 +89,36 @@ public class DockerOperationsTest { @Test public void vespaVersionIsParsed() { - assertThat(DockerOperations.parseVespaVersion("5.119.53"), CoreMatchers.is(Optional.of("5.119.53"))); + assertThat(DockerOperationsImpl.parseVespaVersion("5.119.53"), CoreMatchers.is(Optional.of("5.119.53"))); } @Test public void vespaVersionIsParsedWithSpacesAndNewlines() { - assertThat(DockerOperations.parseVespaVersion("5.119.53\n"), CoreMatchers.is(Optional.of("5.119.53"))); - assertThat(DockerOperations.parseVespaVersion(" 5.119.53 \n"), CoreMatchers.is(Optional.of("5.119.53"))); - assertThat(DockerOperations.parseVespaVersion("\n 5.119.53 \n"), CoreMatchers.is(Optional.of("5.119.53"))); + assertThat(DockerOperationsImpl.parseVespaVersion("5.119.53\n"), CoreMatchers.is(Optional.of("5.119.53"))); + assertThat(DockerOperationsImpl.parseVespaVersion(" 5.119.53 \n"), CoreMatchers.is(Optional.of("5.119.53"))); + assertThat(DockerOperationsImpl.parseVespaVersion("\n 5.119.53 \n"), CoreMatchers.is(Optional.of("5.119.53"))); } @Test public void vespaVersionIsParsedWithIrregularVersionScheme() { - assertThat(DockerOperations.parseVespaVersion("7.2"), CoreMatchers.is(Optional.of("7.2"))); - assertThat(DockerOperations.parseVespaVersion("8.0-beta"), CoreMatchers.is(Optional.of("8.0-beta"))); - assertThat(DockerOperations.parseVespaVersion("foo"), CoreMatchers.is(Optional.of("foo"))); - assertThat(DockerOperations.parseVespaVersion("119"), CoreMatchers.is(Optional.of("119"))); + assertThat(DockerOperationsImpl.parseVespaVersion("7.2"), CoreMatchers.is(Optional.of("7.2"))); + assertThat(DockerOperationsImpl.parseVespaVersion("8.0-beta"), CoreMatchers.is(Optional.of("8.0-beta"))); + assertThat(DockerOperationsImpl.parseVespaVersion("foo"), CoreMatchers.is(Optional.of("foo"))); + assertThat(DockerOperationsImpl.parseVespaVersion("119"), CoreMatchers.is(Optional.of("119"))); } @Test public void vespaVersionIsNotParsedFromNull() { - assertThat(DockerOperations.parseVespaVersion(null), CoreMatchers.is(Optional.empty())); + assertThat(DockerOperationsImpl.parseVespaVersion(null), CoreMatchers.is(Optional.empty())); } @Test public void vespaVersionIsNotParsedFromEmptyString() { - assertThat(DockerOperations.parseVespaVersion(""), CoreMatchers.is(Optional.empty())); + assertThat(DockerOperationsImpl.parseVespaVersion(""), CoreMatchers.is(Optional.empty())); } @Test public void vespaVersionIsNotParsedFromUnexpectedContent() { - assertThat(DockerOperations.parseVespaVersion("No such command 'vespanodectl'"), CoreMatchers.is(Optional.empty())); + assertThat(DockerOperationsImpl.parseVespaVersion("No such command 'vespanodectl'"), CoreMatchers.is(Optional.empty())); } }
\ No newline at end of file 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 004265f3346..742a0b4277c 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 @@ -8,7 +8,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.dockerapi.Docker; -import com.yahoo.vespa.hosted.node.admin.nodeagent.DockerOperations; +import com.yahoo.vespa.hosted.node.admin.docker.DockerOperationsImpl; import com.yahoo.vespa.hosted.node.admin.provider.ComponentsProvider; import java.util.function.Function; @@ -25,7 +25,7 @@ public class ComponentsProviderWithMocks implements ComponentsProvider { private Docker dockerMock = new DockerMock(); private final Function<HostName, NodeAgent> nodeAgentFactory = (hostName) -> - new NodeAgentImpl(hostName, nodeRepositoryMock, orchestratorMock, new DockerOperations(dockerMock), maintenanceSchedulerMock); + new NodeAgentImpl(hostName, nodeRepositoryMock, orchestratorMock, new DockerOperationsImpl(dockerMock), maintenanceSchedulerMock); private NodeAdmin nodeAdmin = new NodeAdminImpl(dockerMock, nodeAgentFactory, maintenanceSchedulerMock, 100); 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 3583054bec7..fbf4636e7e3 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 @@ -10,7 +10,7 @@ import com.yahoo.vespa.hosted.node.admin.nodeadmin.NodeAdminImpl; 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.nodeagent.DockerOperations; +import com.yahoo.vespa.hosted.node.admin.docker.DockerOperationsImpl; import com.yahoo.vespa.hosted.node.admin.noderepository.NodeState; import org.junit.After; import org.junit.Before; @@ -50,7 +50,7 @@ public class DockerFailTest { dockerMock = new DockerMock(); Function<HostName, NodeAgent> nodeAgentFactory = (hostName) -> - new NodeAgentImpl(hostName, nodeRepositoryMock, orchestratorMock, new DockerOperations(dockerMock), maintenanceSchedulerMock); + new NodeAgentImpl(hostName, nodeRepositoryMock, orchestratorMock, new DockerOperationsImpl(dockerMock), maintenanceSchedulerMock); NodeAdmin nodeAdmin = new NodeAdminImpl(dockerMock, nodeAgentFactory, maintenanceSchedulerMock, 100); HostName hostName = new HostName("host1"); 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 1f776a4b911..4aae2ca1d7f 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 @@ -11,7 +11,7 @@ import com.yahoo.vespa.hosted.node.admin.nodeadmin.NodeAdminImpl; 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.nodeagent.DockerOperations; +import com.yahoo.vespa.hosted.node.admin.docker.DockerOperationsImpl; import com.yahoo.vespa.hosted.node.admin.noderepository.NodeState; import org.junit.After; import org.junit.Before; @@ -52,7 +52,7 @@ public class MultiDockerTest { dockerMock = new DockerMock(); Function<HostName, NodeAgent> nodeAgentFactory = (hostName) -> - new NodeAgentImpl(hostName, nodeRepositoryMock, orchestratorMock, new DockerOperations(dockerMock), maintenanceSchedulerMock); + new NodeAgentImpl(hostName, nodeRepositoryMock, orchestratorMock, new DockerOperationsImpl(dockerMock), maintenanceSchedulerMock); nodeAdmin = new NodeAdminImpl(dockerMock, nodeAgentFactory, maintenanceSchedulerMock, 100); 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 af1b447b1d2..e393501d17b 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 @@ -10,7 +10,7 @@ import com.yahoo.vespa.hosted.node.admin.nodeadmin.NodeAdminImpl; 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.nodeagent.DockerOperations; +import com.yahoo.vespa.hosted.node.admin.docker.DockerOperationsImpl; import com.yahoo.vespa.hosted.node.admin.noderepository.NodeState; import org.junit.After; import org.junit.Before; @@ -57,7 +57,7 @@ public class NodeStateTest { dockerMock = new DockerMock(); Function<HostName, NodeAgent> nodeAgentFactory = (hostName) -> - new NodeAgentImpl(hostName, nodeRepositoryMock, orchestratorMock, new DockerOperations(dockerMock), maintenanceSchedulerMock); + new NodeAgentImpl(hostName, nodeRepositoryMock, orchestratorMock, new DockerOperationsImpl(dockerMock), maintenanceSchedulerMock); NodeAdmin nodeAdmin = new NodeAdminImpl(dockerMock, nodeAgentFactory, maintenanceSchedulerMock, 100); hostName = new HostName("host1"); 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 c7489fc28aa..0ab1940e1b2 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 @@ -10,7 +10,7 @@ import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgent; import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentImpl; import com.yahoo.vespa.hosted.dockerapi.ContainerName; import com.yahoo.vespa.hosted.dockerapi.DockerImage; -import com.yahoo.vespa.hosted.node.admin.nodeagent.DockerOperations; +import com.yahoo.vespa.hosted.node.admin.docker.DockerOperationsImpl; import com.yahoo.vespa.hosted.node.admin.noderepository.NodeState; import org.junit.After; import org.junit.Before; @@ -59,7 +59,7 @@ public class ResumeTest { DockerMock dockerMock = new DockerMock(); Function<HostName, NodeAgent> nodeAgentFactory = (hostName) -> - new NodeAgentImpl(hostName, nodeRepositoryMock, orchestratorMock, new DockerOperations(dockerMock), maintenanceSchedulerMock); + new NodeAgentImpl(hostName, nodeRepositoryMock, orchestratorMock, new DockerOperationsImpl(dockerMock), maintenanceSchedulerMock); NodeAdmin nodeAdmin = new NodeAdminImpl(dockerMock, nodeAgentFactory, maintenanceSchedulerMock, 100); NodeRepoMock.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 d2d71c7b0be..f6d9e9d5a38 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 @@ -4,10 +4,11 @@ package com.yahoo.vespa.hosted.node.admin.nodeagent; import com.yahoo.vespa.applicationmodel.HostName; import com.yahoo.vespa.hosted.dockerapi.Container; import com.yahoo.vespa.hosted.dockerapi.ContainerName; -import com.yahoo.vespa.hosted.dockerapi.Docker; import com.yahoo.vespa.hosted.dockerapi.DockerImage; import com.yahoo.vespa.hosted.dockerapi.ProcessResult; import com.yahoo.vespa.hosted.node.admin.ContainerNodeSpec; +import com.yahoo.vespa.hosted.node.admin.docker.DockerOperations; +import com.yahoo.vespa.hosted.node.admin.docker.DockerOperationsImpl; import com.yahoo.vespa.hosted.node.admin.integrationTests.DockerMock; import com.yahoo.vespa.hosted.node.admin.maintenance.MaintenanceScheduler; import com.yahoo.vespa.hosted.node.admin.noderepository.NodeRepository; @@ -17,7 +18,6 @@ import org.junit.Test; import org.mockito.InOrder; import java.io.IOException; -import java.net.InetAddress; import java.util.Optional; import java.util.concurrent.CompletableFuture; @@ -48,12 +48,12 @@ public class NodeAgentImplTest { private static final ProcessResult NODE_PROGRAM_DOESNT_EXIST = new ProcessResult(1, "", ""); private final HostName hostName = new HostName("hostname"); - private final Docker docker = mock(Docker.class); + private final DockerOperations docker = mock(DockerOperations.class); private final NodeRepository nodeRepository = mock(NodeRepository.class); private final Orchestrator orchestrator = mock(Orchestrator.class); private final MaintenanceScheduler maintenanceScheduler = mock(MaintenanceScheduler.class); - private final NodeAgentImpl nodeAgent = new NodeAgentImpl(hostName, nodeRepository, orchestrator, new DockerOperations(docker), maintenanceScheduler); + private final NodeAgentImpl nodeAgent = new NodeAgentImpl(hostName, nodeRepository, orchestrator, new DockerOperationsImpl(docker), maintenanceScheduler); @Test public void upToDateContainerIsUntouched() throws Exception { @@ -74,9 +74,10 @@ public class NodeAgentImplTest { final Container existingContainer = new Container(hostName, dockerImage, containerName, isRunning); final String vespaVersion = "7.8.9"; - when(docker.imageIsDownloaded(dockerImage)).thenReturn(true); + when(docker.shouldScheduleDownloadOfImage(dockerImage)).thenReturn(false); + when(docker.removeContainerIfNeeded(eq(nodeSpec), eq(hostName), any())); when(docker.executeInContainer(eq(containerName), anyVararg())).thenReturn(NODE_PROGRAM_DOESNT_EXIST); - when(docker.executeInContainer(eq(containerName), eq(DockerOperations.GET_VESPA_VERSION_COMMAND))) + when(docker.executeInContainer(eq(containerName), eq(DockerOperationsImpl.GET_VESPA_VERSION_COMMAND))) .thenReturn(new ProcessResult(0, vespaVersion, "")); when(nodeRepository.getContainerNodeSpec(hostName)).thenReturn(Optional.of(nodeSpec)); @@ -120,7 +121,7 @@ public class NodeAgentImplTest { when(docker.imageIsDownloaded(dockerImage)).thenReturn(true); when(docker.executeInContainer(eq(containerName), anyVararg())).thenReturn(NODE_PROGRAM_DOESNT_EXIST); - when(docker.executeInContainer(eq(containerName), eq(DockerOperations.GET_VESPA_VERSION_COMMAND))) + when(docker.executeInContainer(eq(containerName), eq(DockerOperationsImpl.GET_VESPA_VERSION_COMMAND))) .thenReturn(new ProcessResult(0, vespaVersion, "")); when(orchestrator.suspend(any(HostName.class))).thenReturn(true); @@ -164,7 +165,7 @@ public class NodeAgentImplTest { when(docker.imageIsDownloaded(wantedDockerImage)).thenReturn(true); when(docker.executeInContainer(eq(containerName), anyVararg())).thenReturn(NODE_PROGRAM_DOESNT_EXIST); - when(docker.executeInContainer(eq(containerName), eq(DockerOperations.GET_VESPA_VERSION_COMMAND))) + when(docker.executeInContainer(eq(containerName), eq(DockerOperationsImpl.GET_VESPA_VERSION_COMMAND))) .thenReturn(new ProcessResult(0, vespaVersion, "")); when(orchestrator.suspend(any(HostName.class))).thenReturn(true); @@ -241,7 +242,7 @@ public class NodeAgentImplTest { when(docker.imageIsDownloaded(dockerImage)).thenReturn(true); when(docker.executeInContainer(eq(containerName), anyVararg())).thenReturn(NODE_PROGRAM_DOESNT_EXIST); - when(docker.executeInContainer(eq(containerName), eq(DockerOperations.GET_VESPA_VERSION_COMMAND))) + when(docker.executeInContainer(eq(containerName), eq(DockerOperationsImpl.GET_VESPA_VERSION_COMMAND))) .thenReturn(new ProcessResult(0, vespaVersion, "")); when(orchestrator.suspend(any(HostName.class))).thenReturn(true); when(docker.createStartContainerCommand( @@ -284,7 +285,7 @@ public class NodeAgentImplTest { when(docker.imageIsDownloaded(dockerImage)).thenReturn(true); when(docker.executeInContainer(eq(containerName), anyVararg())).thenReturn(NODE_PROGRAM_DOESNT_EXIST); - when(docker.executeInContainer(eq(containerName), eq(DockerOperations.GET_VESPA_VERSION_COMMAND))) + when(docker.executeInContainer(eq(containerName), eq(DockerOperationsImpl.GET_VESPA_VERSION_COMMAND))) .thenReturn(new ProcessResult(0, vespaVersion, "")); when(orchestrator.suspend(any(HostName.class))).thenReturn(true); when(nodeRepository.getContainerNodeSpec(hostName)).thenReturn(Optional.of(nodeSpec)); @@ -774,7 +775,7 @@ public class NodeAgentImplTest { when(docker.imageIsDownloaded(any(DockerImage.class))).thenReturn(true); when(docker.executeInContainer(eq(containerName), anyVararg())).thenReturn(NODE_PROGRAM_DOESNT_EXIST); - when(docker.executeInContainer(eq(containerName), eq(DockerOperations.GET_VESPA_VERSION_COMMAND))) + when(docker.executeInContainer(eq(containerName), eq(DockerOperationsImpl.GET_VESPA_VERSION_COMMAND))) .thenReturn(new ProcessResult(0, vespaVersion, "")); when(orchestrator.suspend(any(HostName.class))).thenReturn(true); @@ -852,7 +853,7 @@ public class NodeAgentImplTest { when(docker.imageIsDownloaded(any(DockerImage.class))).thenReturn(true); when(docker.executeInContainer(eq(containerName), anyVararg())).thenReturn(NODE_PROGRAM_DOESNT_EXIST); - when(docker.executeInContainer(eq(containerName), eq(DockerOperations.GET_VESPA_VERSION_COMMAND))) + when(docker.executeInContainer(eq(containerName), eq(DockerOperationsImpl.GET_VESPA_VERSION_COMMAND))) .thenReturn(new ProcessResult(0, vespaVersion, "")); when(orchestrator.suspend(any(HostName.class))).thenReturn(true); doThrow(new IOException()).doNothing().when(nodeRepository).updateNodeAttributes( @@ -912,7 +913,7 @@ public class NodeAgentImplTest { .thenReturn(new ProcessResult(0, "node program exists", "")) .thenReturn(new ProcessResult(0, "node program succeeds 3rd time", "")); - when(docker.executeInContainer(eq(containerName), eq(DockerOperations.GET_VESPA_VERSION_COMMAND))) + when(docker.executeInContainer(eq(containerName), eq(DockerOperationsImpl.GET_VESPA_VERSION_COMMAND))) .thenReturn(new ProcessResult(0, vespaVersion, "")); final InOrder inOrder = inOrder(orchestrator, docker); @@ -1006,7 +1007,7 @@ public class NodeAgentImplTest { .thenReturn(new ProcessResult(0, "output", "")); // resuming succeeds break; } - when(docker.executeInContainer(eq(containerName), eq(DockerOperations.GET_VESPA_VERSION_COMMAND))) + when(docker.executeInContainer(eq(containerName), eq(DockerOperationsImpl.GET_VESPA_VERSION_COMMAND))) .thenReturn(new ProcessResult(0, vespaVersion, "")); when(orchestrator.suspend(any(HostName.class))).thenReturn(true); |