summaryrefslogtreecommitdiffstats
path: root/node-admin
diff options
context:
space:
mode:
authorfreva <valerijf@yahoo-inc.com>2016-12-14 11:07:46 +0100
committerfreva <valerijf@yahoo-inc.com>2016-12-14 11:07:46 +0100
commited1dfcffd8308725fc81a875457ea0f1c04beda8 (patch)
tree14f4ce2cfcd6cc996d5978bf60d623ad65eaa9c7 /node-admin
parenta078e26db8db9d0d315cda7f467721d26c522f99 (diff)
Added node-admin config
Diffstat (limited to 'node-admin')
-rw-r--r--node-admin/src/main/application/services.xml5
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainer.java2
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImpl.java6
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java41
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/provider/ComponentsProviderImpl.java26
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/maintenance/Maintainer.java15
-rw-r--r--node-admin/src/main/resources/configdefinitions/node-admin.def5
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/RunVespaLocal.java11
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/ComponentsProviderWithMocks.java10
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerTester.java6
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/StorageMaintainerMock.java2
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImplTest.java4
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java3
13 files changed, 73 insertions, 63 deletions
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 @@
<config name='vespa.hosted.dockerapi.docker'>
<uri>tcp://localhost:2376</uri>
- <caCertPath></caCertPath>
- <clientCertPath></clientCertPath>
- <clientKeyPath></clientKeyPath>
</config>
+
+ <config name='vespa.hosted.node.admin.node-admin'/>
</jdisc>
</services>
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<String, NodeAgent> nodeAgentFactory;
- private final StorageMaintainer storageMaintainer;
+ private final Optional<StorageMaintainer> storageMaintainer;
private AtomicBoolean frozen = new AtomicBoolean(false);
private final Map<String, NodeAgent> nodeAgents = new HashMap<>();
@@ -57,7 +57,7 @@ public class NodeAdminImpl implements NodeAdmin {
private CounterWrapper numberOfUnhandledExceptionsInNodeAgent;
public NodeAdminImpl(final DockerOperations dockerOperations, final Function<String, NodeAgent> nodeAgentFactory,
- final StorageMaintainer storageMaintainer, int nodeAgentScanIntervalMillis,
+ final Optional<StorageMaintainer> 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<ContainerNodeSpec> containersToRun) {
final List<Container> 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> 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> 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> storageMaintainer) {
String baseHostName = HostName.getLocalhost();
Set<String> 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<String, NodeAgent> 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<String> 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<String, NodeAgent> 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<String, NodeAgent> 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<String, NodeAgent> 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));