From ed1dfcffd8308725fc81a875457ea0f1c04beda8 Mon Sep 17 00:00:00 2001 From: freva Date: Wed, 14 Dec 2016 11:07:46 +0100 Subject: Added node-admin config --- node-admin/src/main/application/services.xml | 5 ++- .../node/admin/maintenance/StorageMaintainer.java | 2 +- .../hosted/node/admin/nodeadmin/NodeAdminImpl.java | 6 ++-- .../hosted/node/admin/nodeagent/NodeAgentImpl.java | 41 +++++++++++----------- .../admin/provider/ComponentsProviderImpl.java | 26 +++++++++----- .../vespa/hosted/node/maintenance/Maintainer.java | 15 ++++---- .../resources/configdefinitions/node-admin.def | 5 +++ .../hosted/node/admin/docker/RunVespaLocal.java | 11 +++--- .../ComponentsProviderWithMocks.java | 10 +++--- .../node/admin/integrationTests/DockerTester.java | 6 ++-- .../integrationTests/StorageMaintainerMock.java | 2 +- .../node/admin/nodeadmin/NodeAdminImplTest.java | 4 +-- .../node/admin/nodeagent/NodeAgentImplTest.java | 3 +- 13 files changed, 73 insertions(+), 63 deletions(-) create mode 100644 node-admin/src/main/resources/configdefinitions/node-admin.def (limited to 'node-admin') diff --git a/node-admin/src/main/application/services.xml b/node-admin/src/main/application/services.xml index c746afa0e85..7370c2960d0 100644 --- a/node-admin/src/main/application/services.xml +++ b/node-admin/src/main/application/services.xml @@ -12,9 +12,8 @@ tcp://localhost:2376 - - - + + 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 14b690dac9d..f94fa3067f0 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 @@ -125,7 +125,7 @@ public class StorageMaintainer { DeleteOldAppData.deleteFiles(nodeAdminJDiskLogsPath.getAbsolutePath(), Duration.ofDays(31).getSeconds(), null, false); } - public void archiveNodeData(ContainerName containerName) throws IOException { + public void archiveNodeData(ContainerName containerName) { PrefixLogger logger = PrefixLogger.getNodeAgentLogger(StorageMaintainer.class, containerName); Maintainer.archiveAppData(logger, containerName); } 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 473b9171d7a..cf42940734e 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 @@ -45,7 +45,7 @@ public class NodeAdminImpl implements NodeAdmin { private final DockerOperations dockerOperations; private final Function nodeAgentFactory; - private final StorageMaintainer storageMaintainer; + private final Optional storageMaintainer; private AtomicBoolean frozen = new AtomicBoolean(false); private final Map nodeAgents = new HashMap<>(); @@ -57,7 +57,7 @@ public class NodeAdminImpl implements NodeAdmin { private CounterWrapper numberOfUnhandledExceptionsInNodeAgent; public NodeAdminImpl(final DockerOperations dockerOperations, final Function nodeAgentFactory, - final StorageMaintainer storageMaintainer, int nodeAgentScanIntervalMillis, + final Optional storageMaintainer, int nodeAgentScanIntervalMillis, final MetricReceiverWrapper metricReceiver) { this.dockerOperations = dockerOperations; this.nodeAgentFactory = nodeAgentFactory; @@ -84,7 +84,7 @@ public class NodeAdminImpl implements NodeAdmin { public void refreshContainersToRun(final List containersToRun) { final List existingContainers = dockerOperations.getAllManagedContainers(); - storageMaintainer.cleanNodeAdmin(); + storageMaintainer.ifPresent(StorageMaintainer::cleanNodeAdmin); synchronizeNodeSpecsToNodeAgents(containersToRun, existingContainers); dockerOperations.deleteUnusedDockerImages(); 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 1a3cbee8550..36157bffb03 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 @@ -17,7 +17,6 @@ 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; @@ -58,10 +57,9 @@ public class NodeAgentImpl implements NodeAgent { private final NodeRepository nodeRepository; private final Orchestrator orchestrator; private final DockerOperations dockerOperations; - private final StorageMaintainer storageMaintainer; + private final Optional storageMaintainer; private final MetricReceiverWrapper metricReceiver; private final Environment environment; - private final Maintainer maintainer; private final Object monitor = new Object(); @@ -91,10 +89,9 @@ public class NodeAgentImpl implements NodeAgent { final NodeRepository nodeRepository, final Orchestrator orchestrator, final DockerOperations dockerOperations, - final StorageMaintainer storageMaintainer, + final Optional storageMaintainer, final MetricReceiverWrapper metricReceiver, - final Environment environment, - final Maintainer maintainer) { + final Environment environment) { this.nodeRepository = nodeRepository; this.orchestrator = orchestrator; this.hostname = hostName; @@ -104,7 +101,6 @@ public class NodeAgentImpl implements NodeAgent { NodeRepositoryImpl.containerNameFromHostName(hostName)); this.metricReceiver = metricReceiver; this.environment = environment; - this.maintainer = maintainer; } @Override @@ -270,8 +266,7 @@ public class NodeAgentImpl implements NodeAgent { if (! nodeSpec.currentRestartGeneration.isPresent() || nodeSpec.currentRestartGeneration.get() < nodeSpec.wantedRestartGeneration.get()) { return Optional.of("Restart requested - wanted restart generation has been bumped: " - + nodeSpec.currentRestartGeneration.get() + " -> " + nodeSpec.wantedRestartGeneration - .get()); + + nodeSpec.currentRestartGeneration.get() + " -> " + nodeSpec.wantedRestartGeneration.get()); } return Optional.empty(); } @@ -399,7 +394,7 @@ public class NodeAgentImpl implements NodeAgent { } // Public for testing - public void tick() throws Exception { + void tick() throws Exception { final ContainerNodeSpec nodeSpec = nodeRepository.getContainerNodeSpec(hostname) .orElseThrow(() -> new IllegalStateException(String.format("Node '%s' missing from node repository.", hostname))); @@ -420,8 +415,10 @@ public class NodeAgentImpl implements NodeAgent { updateNodeRepoWithCurrentAttributes(nodeSpec); break; case active: - storageMaintainer.removeOldFilesFromNode(nodeSpec.containerName); - storageMaintainer.handleCoreDumpsForContainer(nodeSpec, environment); + storageMaintainer.ifPresent(maintainer -> { + maintainer.removeOldFilesFromNode(nodeSpec.containerName); + maintainer.handleCoreDumpsForContainer(nodeSpec, environment); + }); scheduleDownLoadIfNeeded(nodeSpec); if (imageBeingDownloaded != null) { addDebugMessage("Waiting for image to download " + imageBeingDownloaded.asString()); @@ -446,16 +443,16 @@ public class NodeAgentImpl implements NodeAgent { orchestrator.resume(nodeSpec.hostname); break; case inactive: - storageMaintainer.removeOldFilesFromNode(nodeSpec.containerName); + storageMaintainer.ifPresent(maintainer -> maintainer.removeOldFilesFromNode(nodeSpec.containerName)); removeContainerIfNeededUpdateContainerState(nodeSpec); updateNodeRepoWithCurrentAttributes(nodeSpec); break; case provisioned: case dirty: - storageMaintainer.removeOldFilesFromNode(nodeSpec.containerName); + storageMaintainer.ifPresent(maintainer -> maintainer.removeOldFilesFromNode(nodeSpec.containerName)); removeContainerIfNeededUpdateContainerState(nodeSpec); logger.info("State is " + nodeSpec.nodeState + ", will delete application storage and mark node as ready"); - storageMaintainer.archiveNodeData(nodeSpec.containerName); + storageMaintainer.ifPresent(maintainer -> maintainer.archiveNodeData(nodeSpec.containerName)); updateNodeRepoAndMarkNodeAsReady(nodeSpec); break; default: @@ -513,8 +510,10 @@ public class NodeAgentImpl implements NodeAgent { addIfNotNull(netDims, "node.network.bytes_sent", interfaceStats, "tx_bytes"); }); - storageMaintainer.updateIfNeededAndGetDiskMetricsFor(nodeSpec.containerName).forEach( - (metricName, metricValue) -> metricReceiver.declareGauge(dimensions, metricName).sample(metricValue.doubleValue())); + storageMaintainer.ifPresent(maintainer -> maintainer + .updateIfNeededAndGetDiskMetricsFor(nodeSpec.containerName) + .forEach((metricName, metricValue) -> + metricReceiver.declareGauge(dimensions, metricName).sample(metricValue.doubleValue()))); } @SuppressWarnings("unchecked") @@ -547,7 +546,9 @@ public class NodeAgentImpl implements NodeAgent { } private void configureContainerMetrics(ContainerNodeSpec nodeSpec) { - final Path yamasAgentFolder = maintainer.pathInNodeAdminFromPathInNode(nodeSpec.containerName, "/etc/yamas-agent/"); + if (! storageMaintainer.isPresent()) return; + final Path yamasAgentFolder = storageMaintainer.get().getMaintainer() + .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") @@ -572,11 +573,11 @@ public class NodeAgentImpl implements NodeAgent { try { scheduleMaker.writeTo(yamasAgentFolder); + final String[] restartYamasAgent = new String[] {"service" , "yamas-agent", "restart"}; + dockerOperations.executeCommandInContainer(nodeSpec.containerName, restartYamasAgent); } 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.executeCommandInContainer(nodeSpec.containerName, restartYamasAgent); } class CpuUsageReporter { 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 bd154d905fe..d4916ea1c02 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 @@ -5,6 +5,7 @@ import com.google.inject.Inject; import com.yahoo.net.HostName; import com.yahoo.vespa.defaults.Defaults; import com.yahoo.vespa.hosted.dockerapi.ContainerName; +import com.yahoo.vespa.hosted.dockerapi.Docker; import com.yahoo.vespa.hosted.dockerapi.metrics.MetricReceiverWrapper; import com.yahoo.vespa.hosted.node.admin.docker.DockerOperations; import com.yahoo.vespa.hosted.node.admin.maintenance.StorageMaintainer; @@ -13,8 +14,8 @@ 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.dockerapi.Docker; import com.yahoo.vespa.hosted.node.admin.docker.DockerOperationsImpl; +import com.yahoo.vespa.hosted.node.admin.NodeAdminConfig; 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; @@ -26,6 +27,7 @@ import com.yahoo.vespa.hosted.node.maintenance.Maintainer; import java.io.IOException; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.Optional; import java.util.Set; import java.util.function.Function; @@ -46,8 +48,8 @@ public class ComponentsProviderImpl implements ComponentsProvider { // which happens rarely. Changes of apps running etc it detected by the NodeAgent. private static final int NODE_ADMIN_STATE_INTERVAL_MILLIS = 5 * 60000; - public ComponentsProviderImpl(final Docker docker, final MetricReceiverWrapper metricReceiver, - final StorageMaintainer storageMaintainer, final Environment environment) { + public ComponentsProviderImpl(Docker docker, MetricReceiverWrapper metricReceiver, Environment environment, + Maintainer maintainer, Optional storageMaintainer) { String baseHostName = HostName.getLocalhost(); Set configServerHosts = environment.getConfigServerHosts(); @@ -55,10 +57,10 @@ public class ComponentsProviderImpl implements ComponentsProvider { NodeRepository nodeRepository = new NodeRepositoryImpl(configServerHosts, WEB_SERVICE_PORT, baseHostName); final DockerOperations dockerOperations = new DockerOperationsImpl( - docker, environment, storageMaintainer.getMaintainer(), metricReceiver); + docker, environment, maintainer, metricReceiver); final Function nodeAgentFactory = (hostName) -> new NodeAgentImpl(hostName, nodeRepository, orchestrator, dockerOperations, - storageMaintainer, metricReceiver, environment, storageMaintainer.getMaintainer()); + storageMaintainer, metricReceiver, environment); final NodeAdmin nodeAdmin = new NodeAdminImpl(dockerOperations, nodeAgentFactory, storageMaintainer, NODE_AGENT_SCAN_INTERVAL_MILLIS, metricReceiver); nodeAdminStateUpdater = new NodeAdminStateUpdater(nodeRepository, nodeAdmin, INITIAL_SCHEDULER_DELAY_MILLIS, @@ -68,9 +70,15 @@ public class ComponentsProviderImpl implements ComponentsProvider { } @Inject - public ComponentsProviderImpl(final Docker docker, final MetricReceiverWrapper metricReceiver) { - this(docker, metricReceiver, new StorageMaintainer(new Maintainer()), new Environment()); - initializeNodeAgentSecretAgent(docker); + public ComponentsProviderImpl(final NodeAdminConfig config, final Docker docker, final MetricReceiverWrapper metricReceiver) { + this( + docker, + metricReceiver, + new Environment(), + new Maintainer(), + config.isRunningLocally() ? Optional.empty() : Optional.of(new StorageMaintainer(new Maintainer()))); + + if (! config.isRunningLocally()) initializeNodeAgentSecretAgent(docker); } @Override @@ -85,8 +93,8 @@ public class ComponentsProviderImpl implements ComponentsProvider { private void initializeNodeAgentSecretAgent(Docker docker) { - ContainerName nodeAdminName = new ContainerName("node-admin"); final Path yamasAgentFolder = Paths.get("/etc/yamas-agent/"); + ContainerName nodeAdminName = new ContainerName("node-admin"); docker.executeInContainer(nodeAdminName, "sudo", "chmod", "a+w", yamasAgentFolder.toString()); Path nodeAdminCheckPath = Paths.get("/usr/bin/curl"); diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/maintenance/Maintainer.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/maintenance/Maintainer.java index 55f10004c77..828755390e3 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/maintenance/Maintainer.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/maintenance/Maintainer.java @@ -59,7 +59,6 @@ public class Maintainer { private static final String JOB_DELETE_OLD_APP_DATA = "delete-old-app-data"; private static final String JOB_ARCHIVE_APP_DATA = "archive-app-data"; private static final String JOB_CLEAN_CORE_DUMPS = "clean-core-dumps"; - private static final String JOB_CLEAN_HOME = "clean-home"; private static final String JOB_HANDLE_CORE_DUMPS = "handle-core-dumps"; private static Optional kernelVersion = Optional.empty(); @@ -115,13 +114,13 @@ public class Maintainer { attributes.put("kernel_version", "unknown"); } - if (nodeSpec.wantedDockerImage.isPresent()) attributes.put("docker_image", nodeSpec.wantedDockerImage.get().asString()); - if (nodeSpec.vespaVersion.isPresent()) attributes.put("vespa_version", nodeSpec.vespaVersion.get()); - if (nodeSpec.owner.isPresent()) { - attributes.put("tenant", nodeSpec.owner.get().tenant); - attributes.put("application", nodeSpec.owner.get().application); - attributes.put("instance", nodeSpec.owner.get().instance); - } + nodeSpec.wantedDockerImage.ifPresent(image -> attributes.put("docker_image", image.asString())); + nodeSpec.vespaVersion.ifPresent(version -> attributes.put("vespa_version", version)); + nodeSpec.owner.ifPresent(owner -> { + attributes.put("tenant", owner.tenant); + attributes.put("application", owner.application); + attributes.put("instance", owner.instance); + }); executeMaintainer(logger, JOB_HANDLE_CORE_DUMPS, "--container", nodeSpec.containerName.asString(), diff --git a/node-admin/src/main/resources/configdefinitions/node-admin.def b/node-admin/src/main/resources/configdefinitions/node-admin.def new file mode 100644 index 00000000000..ec0be588868 --- /dev/null +++ b/node-admin/src/main/resources/configdefinitions/node-admin.def @@ -0,0 +1,5 @@ +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +namespace=vespa.hosted.node.admin + +# If true, disables secret-agent, core-dump reporting and container-storage maintenance +isRunningLocally bool default = false \ No newline at end of file diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/RunVespaLocal.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/RunVespaLocal.java index bc333adde22..dabb5db44ef 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/RunVespaLocal.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/RunVespaLocal.java @@ -7,8 +7,6 @@ import com.yahoo.vespa.hosted.dockerapi.Docker; import com.yahoo.vespa.hosted.dockerapi.DockerImage; import com.yahoo.vespa.hosted.dockerapi.DockerTestUtils; import com.yahoo.vespa.hosted.dockerapi.metrics.MetricReceiverWrapper; -import com.yahoo.vespa.hosted.node.admin.integrationTests.CallOrderVerifier; -import com.yahoo.vespa.hosted.node.admin.integrationTests.StorageMaintainerMock; import com.yahoo.vespa.hosted.node.admin.nodeadmin.NodeAdminStateUpdater; import com.yahoo.vespa.hosted.node.admin.provider.ComponentsProviderImpl; import com.yahoo.vespa.hosted.node.admin.util.Environment; @@ -23,6 +21,7 @@ import java.net.UnknownHostException; import java.nio.file.Path; import java.time.Duration; import java.util.Collections; +import java.util.Optional; import java.util.Set; import java.util.concurrent.ExecutionException; import java.util.logging.Logger; @@ -91,10 +90,12 @@ public class RunVespaLocal { */ void startNodeAdminInIDE(Path pathToContainerStorage) { logger.info("Starting node-admin"); - nodeAdminStateUpdater = new ComponentsProviderImpl(docker, + nodeAdminStateUpdater = new ComponentsProviderImpl( + docker, new MetricReceiverWrapper(MetricReceiver.nullImplementation), - new StorageMaintainerMock(LocalZoneUtils.getMaintainer(pathToContainerStorage), new CallOrderVerifier()), - environment).getNodeAdminStateUpdater(); + environment, + LocalZoneUtils.getMaintainer(pathToContainerStorage), + Optional.empty()).getNodeAdminStateUpdater(); } /** 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 a32f0edcf99..14f3a78339f 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 @@ -17,6 +17,7 @@ import com.yahoo.vespa.hosted.node.admin.util.InetAddressResolver; import com.yahoo.vespa.hosted.node.maintenance.Maintainer; import java.util.Collections; +import java.util.Optional; import java.util.function.Function; /** @@ -28,7 +29,6 @@ public class ComponentsProviderWithMocks implements ComponentsProvider { static final Maintainer maintainer = new Maintainer(); static final CallOrderVerifier callOrderVerifier = new CallOrderVerifier(); static final NodeRepoMock nodeRepositoryMock = new NodeRepoMock(callOrderVerifier); - static final StorageMaintainerMock maintenanceSchedulerMock = new StorageMaintainerMock(callOrderVerifier); static final OrchestratorMock orchestratorMock = new OrchestratorMock(callOrderVerifier); static final Docker dockerMock = new DockerMock(callOrderVerifier); @@ -40,11 +40,9 @@ public class ComponentsProviderWithMocks implements ComponentsProvider { private final MetricReceiverWrapper mr = new MetricReceiverWrapper(MetricReceiver.nullImplementation); private final DockerOperations dockerOperations = new DockerOperationsImpl(dockerMock, environment, maintainer, mr); private final Function nodeAgentFactory = - (hostName) -> new NodeAgentImpl(hostName, - nodeRepositoryMock, orchestratorMock, dockerOperations, - maintenanceSchedulerMock, mr, - environment, maintainer); - private NodeAdmin nodeAdmin = new NodeAdminImpl(dockerOperations, nodeAgentFactory, maintenanceSchedulerMock, 100, mr); + (hostName) -> new NodeAgentImpl(hostName, nodeRepositoryMock, orchestratorMock, + dockerOperations, Optional.empty(), mr, environment); + private NodeAdmin nodeAdmin = new NodeAdminImpl(dockerOperations, nodeAgentFactory, Optional.empty(), 100, mr); @Override 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 d8ad8898c9e..92bf218ed54 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 @@ -43,7 +43,7 @@ public class DockerTester implements AutoCloseable { public DockerTester() { callOrderVerifier = new CallOrderVerifier(); - StorageMaintainerMock maintenanceSchedulerMock = new StorageMaintainerMock(callOrderVerifier); + StorageMaintainerMock storageMaintainer = new StorageMaintainerMock(callOrderVerifier); orchestratorMock = new OrchestratorMock(callOrderVerifier); nodeRepositoryMock = new NodeRepoMock(callOrderVerifier); dockerMock = new DockerMock(callOrderVerifier); @@ -65,8 +65,8 @@ public class DockerTester implements AutoCloseable { final Maintainer maintainer = new Maintainer(); final DockerOperations dockerOperations = new DockerOperationsImpl(dockerMock, environment, maintainer, mr); Function nodeAgentFactory = (hostName) -> new NodeAgentImpl(hostName, nodeRepositoryMock, - orchestratorMock, dockerOperations, maintenanceSchedulerMock, mr, environment, maintainer); - nodeAdmin = new NodeAdminImpl(dockerOperations, nodeAgentFactory, maintenanceSchedulerMock, 100, mr); + orchestratorMock, dockerOperations, Optional.of(storageMaintainer), mr, environment); + nodeAdmin = new NodeAdminImpl(dockerOperations, nodeAgentFactory, Optional.of(storageMaintainer), 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/StorageMaintainerMock.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/StorageMaintainerMock.java index eed530488c4..f8e9577f945 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 @@ -44,7 +44,7 @@ public class StorageMaintainerMock extends StorageMaintainer { } @Override - public void archiveNodeData(ContainerName containerName) throws IOException { + public void archiveNodeData(ContainerName containerName) { callOrderVerifier.add("DeleteContainerStorage with " + containerName); } } 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 4732b69fa82..a068ffc09f2 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 @@ -9,7 +9,6 @@ import com.yahoo.vespa.hosted.dockerapi.Container; import com.yahoo.vespa.hosted.dockerapi.ContainerName; import com.yahoo.vespa.hosted.dockerapi.DockerImage; 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.nodeagent.NodeAgent; import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentImpl; import com.yahoo.vespa.hosted.provision.Node; @@ -50,9 +49,8 @@ public class NodeAdminImplTest { public void nodeAgentsAreProperlyLifeCycleManaged() throws Exception { final DockerOperations dockerOperations = mock(DockerOperations.class); final Function nodeAgentFactory = mock(NodeAgentFactory.class); - final StorageMaintainer storageMaintainer = mock(StorageMaintainer.class); - final NodeAdminImpl nodeAdmin = new NodeAdminImpl(dockerOperations, nodeAgentFactory, storageMaintainer, 100, + final NodeAdminImpl nodeAdmin = new NodeAdminImpl(dockerOperations, nodeAgentFactory, Optional.empty(), 100, new MetricReceiverWrapper(MetricReceiver.nullImplementation)); final NodeAgent nodeAgent1 = mock(NodeAgentImpl.class); 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 084f58fc7b6..a56b2e163be 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 @@ -66,7 +66,7 @@ public class NodeAgentImplTest { "parent.host.name.yahoo.com", new InetAddressResolver()); private final NodeAgentImpl nodeAgent = new NodeAgentImpl(hostName, nodeRepository, orchestrator, dockerOperations, - storageMaintainer, metricReceiver, environment, maintainer); + Optional.of(storageMaintainer), metricReceiver, environment); @Test public void upToDateContainerIsUntouched() throws Exception { @@ -146,6 +146,7 @@ public class NodeAgentImplTest { when(dockerOperations.shouldScheduleDownloadOfImage(any())).thenReturn(false); when(dockerOperations.startContainerIfNeeded(eq(nodeSpec))).thenReturn(true); when(dockerOperations.getVespaVersion(eq(containerName))).thenReturn(Optional.of(vespaVersion)); + when(storageMaintainer.getMaintainer()).thenReturn(maintainer); when(maintainer.pathInNodeAdminFromPathInNode(any(ContainerName.class), any(String.class))).thenReturn(Files.createTempDirectory("foo")); when(nodeRepository.getContainerNodeSpec(hostName)).thenReturn(Optional.of(nodeSpec)); -- cgit v1.2.3