summaryrefslogtreecommitdiffstats
path: root/node-admin
diff options
context:
space:
mode:
authorValerij Fredriksen <valerijf@oath.com>2017-09-18 10:34:33 +0200
committerValerij Fredriksen <valerijf@oath.com>2017-09-18 10:34:33 +0200
commit5c48cdcd304dc826077d418a0a6a030dfaf7a74f (patch)
treea193d6bb73fb523f10437cfb608d2168806387f8 /node-admin
parent67e72cce03424c0d32d1c8c0de257b488c692b4b (diff)
Remove isRunningLocally from Environment
Diffstat (limited to 'node-admin')
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java4
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImpl.java14
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdater.java7
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java50
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/provider/ComponentsProviderImpl.java24
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/util/Environment.java24
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/ComponentsProviderWithMocks.java11
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerTester.java11
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImplTest.java35
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterTest.java5
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java2
11 files changed, 72 insertions, 115 deletions
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 b21fc573c0f..a4118ebe9ff 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
@@ -116,10 +116,6 @@ public class DockerOperationsImpl implements DockerOperations {
.withAddCapability("SYS_PTRACE") // Needed for gcore, pstack etc.
.withAddCapability("SYS_ADMIN"); // Needed for perf
- if (environment.isRunningLocally()) {
- command.withEntrypoint("/usr/local/bin/start-services.sh", "--run-local");
- }
-
command.withVolume("/etc/hosts", "/etc/hosts");
for (String pathInNode : DIRECTORIES_TO_MOUNT.keySet()) {
String pathInHost = environment.pathInHostFromPathInNode(containerName, pathInNode).toString();
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 84679d1dadd..e39abb47788 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
@@ -46,7 +46,7 @@ public class NodeAdminImpl implements NodeAdmin {
private final DockerOperations dockerOperations;
private final Function<String, NodeAgent> nodeAgentFactory;
- private final Optional<StorageMaintainer> storageMaintainer;
+ private final StorageMaintainer storageMaintainer;
private final Clock clock;
private boolean previousWantFrozen;
@@ -62,10 +62,10 @@ public class NodeAdminImpl implements NodeAdmin {
public NodeAdminImpl(final DockerOperations dockerOperations,
final Function<String, NodeAgent> nodeAgentFactory,
- final Optional<StorageMaintainer> storageMaintainer,
+ final StorageMaintainer storageMaintainer,
+ final AclMaintainer aclMaintainer,
final int nodeAgentScanIntervalMillis,
final MetricReceiverWrapper metricReceiver,
- final Optional<AclMaintainer> aclMaintainer,
final Clock clock) {
this.dockerOperations = dockerOperations;
this.nodeAgentFactory = nodeAgentFactory;
@@ -89,9 +89,9 @@ public class NodeAdminImpl implements NodeAdmin {
}
}, 0, 55, TimeUnit.SECONDS);
- aclMaintainer.ifPresent(maintainer -> aclScheduler.scheduleWithFixedDelay(() -> {
- if (!isFrozen()) maintainer.run();
- }, 30, 60, TimeUnit.SECONDS));
+ aclScheduler.scheduleWithFixedDelay(() -> {
+ if (!isFrozen()) aclMaintainer.run();
+ }, 30, 60, TimeUnit.SECONDS);
}
@Override
@@ -101,7 +101,7 @@ public class NodeAdminImpl implements NodeAdmin {
.map(container -> container.hostname)
.collect(Collectors.toList());
- storageMaintainer.ifPresent(StorageMaintainer::cleanNodeAdmin);
+ storageMaintainer.cleanNodeAdmin();
synchronizeNodeSpecsToNodeAgents(containersToRunHostnames, existingContainerNames);
dockerOperations.deleteUnusedDockerImages();
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdater.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdater.java
index 1f5d6ddd300..8daa8e66679 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdater.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdater.java
@@ -20,7 +20,6 @@ import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
-import java.util.Optional;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
@@ -64,7 +63,7 @@ public class NodeAdminStateUpdater extends AbstractComponent {
public NodeAdminStateUpdater(
final NodeRepository nodeRepository,
final NodeAdmin nodeAdmin,
- Optional<StorageMaintainer> storageMaintainer,
+ StorageMaintainer storageMaintainer,
Clock clock,
Orchestrator orchestrator,
String dockerHostHostName) {
@@ -76,8 +75,8 @@ public class NodeAdminStateUpdater extends AbstractComponent {
this.dockerHostHostName = dockerHostHostName;
this.lastTick = clock.instant();
- storageMaintainer.ifPresent(maintainer -> specVerifierScheduler.scheduleWithFixedDelay(() ->
- updateHardwareDivergence(maintainer), 5, 60, TimeUnit.MINUTES));
+ specVerifierScheduler.scheduleWithFixedDelay(() ->
+ updateHardwareDivergence(storageMaintainer), 5, 60, TimeUnit.MINUTES);
}
private String objectToString() {
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 29484c08472..6ea65be6799 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
@@ -69,10 +69,10 @@ public class NodeAgentImpl implements NodeAgent {
private final NodeRepository nodeRepository;
private final Orchestrator orchestrator;
private final DockerOperations dockerOperations;
- private final Optional<StorageMaintainer> storageMaintainer;
+ private final StorageMaintainer storageMaintainer;
private final Environment environment;
private final Clock clock;
- private final Optional<AclMaintainer> aclMaintainer;
+ private final AclMaintainer aclMaintainer;
private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
private final LinkedList<String> debugMessages = new LinkedList<>();
@@ -114,20 +114,20 @@ public class NodeAgentImpl implements NodeAgent {
final NodeRepository nodeRepository,
final Orchestrator orchestrator,
final DockerOperations dockerOperations,
- final Optional<StorageMaintainer> storageMaintainer,
+ final StorageMaintainer storageMaintainer,
+ final AclMaintainer aclMaintainer,
final Environment environment,
- final Clock clock,
- final Optional<AclMaintainer> aclMaintainer) {
+ final Clock clock) {
+ this.containerName = ContainerName.fromHostname(hostName);
+ this.logger = PrefixLogger.getNodeAgentLogger(NodeAgentImpl.class, containerName);
+ this.hostname = hostName;
this.nodeRepository = nodeRepository;
this.orchestrator = orchestrator;
- this.hostname = hostName;
- this.containerName = ContainerName.fromHostname(hostName);
this.dockerOperations = dockerOperations;
this.storageMaintainer = storageMaintainer;
- this.logger = PrefixLogger.getNodeAgentLogger(NodeAgentImpl.class, containerName);
+ this.aclMaintainer = aclMaintainer;
this.environment = environment;
this.clock = clock;
- this.aclMaintainer = aclMaintainer;
this.lastConverge = clock.instant();
this.serviceRestarter = service -> {
try {
@@ -257,15 +257,13 @@ public class NodeAgentImpl implements NodeAgent {
}
private void startContainer(ContainerNodeSpec nodeSpec) {
- aclMaintainer.ifPresent(AclMaintainer::run);
+ aclMaintainer.run();
dockerOperations.startContainer(containerName, nodeSpec);
lastCpuMetric = new CpuUsageReporter();
currentFilebeatRestarter = filebeatRestarter.scheduleWithFixedDelay(() -> serviceRestarter.accept("filebeat"), 1, 1, TimeUnit.DAYS);
- storageMaintainer.ifPresent(maintainer -> {
- maintainer.writeMetricsConfig(containerName, nodeSpec);
- maintainer.writeFilebeatConfig(containerName, nodeSpec);
- });
+ storageMaintainer.writeMetricsConfig(containerName, nodeSpec);
+ storageMaintainer.writeFilebeatConfig(containerName, nodeSpec);
resumeScriptRun = false;
containerState = UNKNOWN;
@@ -439,9 +437,7 @@ public class NodeAgentImpl implements NodeAgent {
// will change and we will be reporting duplicate metrics.
// TODO: Should be retried if writing fails
if (container.isPresent()) {
- storageMaintainer.ifPresent(maintainer -> {
- maintainer.writeMetricsConfig(containerName, nodeSpec);
- });
+ storageMaintainer.writeMetricsConfig(containerName, nodeSpec);
}
}
@@ -454,14 +450,13 @@ public class NodeAgentImpl implements NodeAgent {
updateNodeRepoWithCurrentAttributes(nodeSpec);
break;
case active:
- storageMaintainer.ifPresent(maintainer -> {
- maintainer.handleCoreDumpsForContainer(containerName, nodeSpec, false);
+ storageMaintainer.handleCoreDumpsForContainer(containerName, nodeSpec, false);
+
+ storageMaintainer.getDiskUsageFor(containerName)
+ .map(diskUsage -> (double) diskUsage / BYTES_IN_GB / nodeSpec.minDiskAvailableGb)
+ .filter(diskUtil -> diskUtil >= 0.8)
+ .ifPresent(diskUtil -> storageMaintainer.removeOldFilesFromNode(containerName));
- maintainer.getDiskUsageFor(containerName)
- .map(diskUsage -> (double) diskUsage / BYTES_IN_GB / nodeSpec.minDiskAvailableGb)
- .filter(diskUtil -> diskUtil >= 0.8)
- .ifPresent(diskUtil -> maintainer.removeOldFilesFromNode(containerName));
- });
scheduleDownLoadIfNeeded(nodeSpec);
if (isDownloadingImage()) {
addDebugMessage("Waiting for image to download " + imageBeingDownloaded.asString());
@@ -469,7 +464,7 @@ public class NodeAgentImpl implements NodeAgent {
}
container = removeContainerIfNeededUpdateContainerState(nodeSpec, container);
if (! container.isPresent()) {
- storageMaintainer.ifPresent(maintainer -> maintainer.handleCoreDumpsForContainer(containerName, nodeSpec, false));
+ storageMaintainer.handleCoreDumpsForContainer(containerName, nodeSpec, false);
startContainer(nodeSpec);
}
@@ -498,7 +493,7 @@ public class NodeAgentImpl implements NodeAgent {
case dirty:
removeContainerIfNeededUpdateContainerState(nodeSpec, container);
logger.info("State is " + nodeSpec.nodeState + ", will delete application storage and mark node as ready");
- storageMaintainer.ifPresent(maintainer -> maintainer.cleanupNodeStorage(containerName, nodeSpec));
+ storageMaintainer.cleanupNodeStorage(containerName, nodeSpec);
updateNodeRepoWithCurrentAttributes(nodeSpec);
nodeRepository.markNodeAvailableForNewAllocation(hostname);
break;
@@ -531,8 +526,7 @@ public class NodeAgentImpl implements NodeAgent {
final long memoryTotalBytesUsage = ((Number) stats.getMemoryStats().get("usage")).longValue();
final long memoryTotalBytesCache = ((Number) ((Map) stats.getMemoryStats().get("stats")).get("cache")).longValue();
final long diskTotalBytes = (long) (nodeSpec.minDiskAvailableGb * BYTES_IN_GB);
- final Optional<Long> diskTotalBytesUsed = storageMaintainer.flatMap(maintainer -> maintainer
- .getDiskUsageFor(containerName));
+ final Optional<Long> diskTotalBytesUsed = storageMaintainer.getDiskUsageFor(containerName);
// CPU usage by a container as percentage of total host CPU, cpuPercentageOfHost, is given by dividing used
// CPU time by the container with CPU time used by the entire system.
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 d61dd3c591b..6191eaebfda 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
@@ -51,6 +51,7 @@ public class ComponentsProviderImpl implements ComponentsProvider {
// Converge towards desired node admin state every 30 seconds
private static final int NODE_ADMIN_CONVERGE_STATE_INTERVAL_MILLIS = 30000;
+ @Inject
public ComponentsProviderImpl(Docker docker, MetricReceiverWrapper metricReceiver, Environment environment) {
String baseHostName = HostName.getLocalhost();
Set<String> configServerHosts = environment.getConfigServerHosts();
@@ -65,30 +66,21 @@ public class ComponentsProviderImpl implements ComponentsProvider {
NodeRepository nodeRepository = new NodeRepositoryImpl(requestExecutor, WEB_SERVICE_PORT, baseHostName);
DockerOperations dockerOperations = new DockerOperationsImpl(docker, environment, processExecuter);
- Optional<StorageMaintainer> storageMaintainer = environment.isRunningLocally() ?
- Optional.empty() : Optional.of(new StorageMaintainer(docker, processExecuter, metricReceiver, environment, clock));
- Optional<AclMaintainer> aclMaintainer = environment.isRunningLocally() ?
- Optional.empty() : Optional.of(new AclMaintainer(dockerOperations, nodeRepository, baseHostName));
+ StorageMaintainer storageMaintainer = new StorageMaintainer(docker, processExecuter, metricReceiver, environment, clock);
+ AclMaintainer aclMaintainer = new AclMaintainer(dockerOperations, nodeRepository, baseHostName);
Function<String, NodeAgent> nodeAgentFactory =
(hostName) -> new NodeAgentImpl(hostName, nodeRepository, orchestrator, dockerOperations,
- storageMaintainer, environment, clock, aclMaintainer);
- NodeAdmin nodeAdmin = new NodeAdminImpl(dockerOperations, nodeAgentFactory, storageMaintainer,
- NODE_AGENT_SCAN_INTERVAL_MILLIS, metricReceiver, aclMaintainer, clock);
+ storageMaintainer, aclMaintainer, environment, clock);
+ NodeAdmin nodeAdmin = new NodeAdminImpl(dockerOperations, nodeAgentFactory, storageMaintainer, aclMaintainer,
+ NODE_AGENT_SCAN_INTERVAL_MILLIS, metricReceiver, clock);
nodeAdminStateUpdater = new NodeAdminStateUpdater(nodeRepository, nodeAdmin, storageMaintainer, clock, orchestrator, baseHostName);
nodeAdminStateUpdater.start(NODE_ADMIN_CONVERGE_STATE_INTERVAL_MILLIS);
metricReceiverWrapper = metricReceiver;
- if (! environment.isRunningLocally()) {
- setCorePattern(docker);
- initializeNodeAgentSecretAgent(docker);
- }
- }
-
- @Inject
- public ComponentsProviderImpl(final Docker docker, final MetricReceiverWrapper metricReceiver) {
- this(docker, metricReceiver, new Environment());
+ setCorePattern(docker);
+ initializeNodeAgentSecretAgent(docker);
}
@Override
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/util/Environment.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/util/Environment.java
index 03433ba64a8..65a4d84b4c3 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/util/Environment.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/util/Environment.java
@@ -15,8 +15,8 @@ import java.time.Instant;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
+import java.util.HashSet;
import java.util.List;
-import java.util.Optional;
import java.util.Set;
import java.util.TimeZone;
import java.util.stream.Collectors;
@@ -35,7 +35,6 @@ public class Environment {
private static final String ENVIRONMENT = "ENVIRONMENT";
private static final String REGION = "REGION";
private static final String LOGSTASH_NODES = "LOGSTASH_NODES";
- private static final String RUNNING_LOCALLY = "RUNNING_LOCALLY";
private static final String COREDUMP_FEED_ENDPOINT = "COREDUMP_FEED_ENDPOINT";
private final Set<String> configServerHosts;
@@ -46,7 +45,6 @@ public class Environment {
private final PathResolver pathResolver;
private final List<String> logstashNodes;
private final String feedEndpoint;
- private final boolean isRunningLocally;
static {
filenameFormatter.setTimeZone(TimeZone.getTimeZone("UTC"));
@@ -60,8 +58,7 @@ public class Environment {
new InetAddressResolver(),
new PathResolver(),
getLogstashNodesFromEnvironment(),
- getEnvironmentVariable(COREDUMP_FEED_ENDPOINT),
- Optional.ofNullable(System.getenv(RUNNING_LOCALLY)).map(Boolean::valueOf).orElse(false));
+ getEnvironmentVariable(COREDUMP_FEED_ENDPOINT));
}
public Environment(Set<String> configServerHosts,
@@ -71,8 +68,7 @@ public class Environment {
InetAddressResolver inetAddressResolver,
PathResolver pathResolver,
List<String> logstashNodes,
- String feedEndpoint,
- boolean isRunningLocally) {
+ String feedEndpoint) {
this.configServerHosts = configServerHosts;
this.environment = environment;
this.region = region;
@@ -81,7 +77,6 @@ public class Environment {
this.pathResolver = pathResolver;
this.logstashNodes = logstashNodes;
this.feedEndpoint = feedEndpoint;
- this.isRunningLocally = isRunningLocally;
}
public Set<String> getConfigServerHosts() { return configServerHosts; }
@@ -115,7 +110,7 @@ public class Environment {
}
final List<String> hostNameStrings = Arrays.asList(configServerHosts.split("[,\\s]+"));
- return hostNameStrings.stream().collect(Collectors.toSet());
+ return new HashSet<>(hostNameStrings);
}
private static List<String> getLogstashNodesFromEnvironment() {
@@ -138,10 +133,6 @@ public class Environment {
return feedEndpoint;
}
- public boolean isRunningLocally() {
- return isRunningLocally;
- }
-
/**
* Absolute path in node admin to directory with processed and reported core dumps
*/
@@ -205,7 +196,6 @@ public class Environment {
private PathResolver pathResolver;
private List<String> logstashNodes = Collections.emptyList();
private String feedEndpoint;
- private boolean isRunningLocally = false;
public Builder configServerHosts(String... hosts) {
configServerHosts = Arrays.stream(hosts).collect(Collectors.toSet());
@@ -247,14 +237,10 @@ public class Environment {
return this;
}
- public Builder isRunningLocally(boolean isRunningLocally) {
- this.isRunningLocally = isRunningLocally;
- return this;
- }
public Environment build() {
return new Environment(configServerHosts, environment, region, parentHostHostname, inetAddressResolver,
- pathResolver, logstashNodes, feedEndpoint, isRunningLocally);
+ pathResolver, logstashNodes, feedEndpoint);
}
}
}
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 166a2d3f70e..518af5abe6b 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
@@ -4,6 +4,8 @@ package com.yahoo.vespa.hosted.node.admin.integrationTests;
import com.yahoo.metrics.simple.MetricReceiver;
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;
+import com.yahoo.vespa.hosted.node.admin.maintenance.acl.AclMaintainer;
import com.yahoo.vespa.hosted.node.admin.nodeadmin.NodeAdmin;
import com.yahoo.vespa.hosted.node.admin.nodeadmin.NodeAdminImpl;
import com.yahoo.vespa.hosted.node.admin.nodeadmin.NodeAdminStateUpdater;
@@ -15,7 +17,6 @@ import com.yahoo.vespa.hosted.node.admin.provider.ComponentsProvider;
import com.yahoo.vespa.hosted.node.admin.util.Environment;
import java.time.Clock;
-import java.util.Optional;
import java.util.function.Function;
import static org.mockito.Mockito.mock;
@@ -30,13 +31,15 @@ public class ComponentsProviderWithMocks implements ComponentsProvider {
static final Orchestrator orchestratorMock = mock(Orchestrator.class);
static final DockerOperations dockerOperationsMock = mock(DockerOperations.class);
+ private final StorageMaintainer storageMaintainer = mock(StorageMaintainer.class);
+ private final AclMaintainer aclMaintainer = mock(AclMaintainer.class);
private final Environment environment = new Environment.Builder().build();
private final MetricReceiverWrapper mr = new MetricReceiverWrapper(MetricReceiver.nullImplementation);
private final Function<String, NodeAgent> nodeAgentFactory =
(hostName) -> new NodeAgentImpl(hostName, nodeRepositoryMock, orchestratorMock,
- dockerOperationsMock, Optional.empty(), environment, Clock.systemUTC(), Optional.empty());
- private final NodeAdmin nodeAdmin = new NodeAdminImpl(dockerOperationsMock, nodeAgentFactory, Optional.empty(), 100, mr, Optional.empty(), Clock.systemUTC());
- private final NodeAdminStateUpdater nodeAdminStateUpdater = new NodeAdminStateUpdater(nodeRepositoryMock, nodeAdmin, Optional.empty(), Clock.systemUTC(), orchestratorMock, "localhost.test.yahoo.com");
+ dockerOperationsMock, storageMaintainer, aclMaintainer, environment, Clock.systemUTC());
+ private final NodeAdmin nodeAdmin = new NodeAdminImpl(dockerOperationsMock, nodeAgentFactory, storageMaintainer, aclMaintainer, 100, mr, Clock.systemUTC());
+ private final NodeAdminStateUpdater nodeAdminStateUpdater = new NodeAdminStateUpdater(nodeRepositoryMock, nodeAdmin, storageMaintainer, Clock.systemUTC(), orchestratorMock, "localhost.test.yahoo.com");
public ComponentsProviderWithMocks() {
nodeAdminStateUpdater.start(10);
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 714e8df64ec..1ca368198d0 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
@@ -7,6 +7,7 @@ import com.yahoo.vespa.hosted.dockerapi.metrics.MetricReceiverWrapper;
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.maintenance.acl.AclMaintainer;
import com.yahoo.vespa.hosted.node.admin.nodeadmin.NodeAdmin;
import com.yahoo.vespa.hosted.node.admin.nodeadmin.NodeAdminImpl;
import com.yahoo.vespa.hosted.node.admin.nodeadmin.NodeAdminStateUpdater;
@@ -20,7 +21,6 @@ import java.net.InetAddress;
import java.net.UnknownHostException;
import java.nio.file.Paths;
import java.time.Clock;
-import java.util.Optional;
import java.util.function.Function;
import static org.mockito.Matchers.any;
@@ -35,7 +35,7 @@ public class DockerTester implements AutoCloseable {
final CallOrderVerifier callOrderVerifier = new CallOrderVerifier();
final Docker dockerMock = new DockerMock(callOrderVerifier);
final NodeRepoMock nodeRepositoryMock = new NodeRepoMock(callOrderVerifier);
- final OrchestratorMock orchestratorMock = new OrchestratorMock(callOrderVerifier);
+ private final OrchestratorMock orchestratorMock = new OrchestratorMock(callOrderVerifier);
private final NodeAdminStateUpdater updater;
private final NodeAdmin nodeAdmin;
@@ -53,14 +53,15 @@ public class DockerTester implements AutoCloseable {
.pathResolver(new PathResolver(Paths.get("/tmp"), Paths.get("/tmp"))).build();
Clock clock = Clock.systemUTC();
StorageMaintainerMock storageMaintainer = new StorageMaintainerMock(dockerMock, null, environment, callOrderVerifier, clock);
+ AclMaintainer aclMaintainer = mock(AclMaintainer.class);
MetricReceiverWrapper mr = new MetricReceiverWrapper(MetricReceiver.nullImplementation);
final DockerOperations dockerOperations = new DockerOperationsImpl(dockerMock, environment, null);
Function<String, NodeAgent> nodeAgentFactory = (hostName) -> new NodeAgentImpl(hostName, nodeRepositoryMock,
- orchestratorMock, dockerOperations, Optional.of(storageMaintainer), environment, clock, Optional.empty());
- nodeAdmin = new NodeAdminImpl(dockerOperations, nodeAgentFactory, Optional.of(storageMaintainer), 100, mr, Optional.empty(), Clock.systemUTC());
- updater = new NodeAdminStateUpdater(nodeRepositoryMock, nodeAdmin, Optional.of(storageMaintainer),
+ orchestratorMock, dockerOperations, storageMaintainer, aclMaintainer, environment, clock);
+ nodeAdmin = new NodeAdminImpl(dockerOperations, nodeAgentFactory, storageMaintainer, aclMaintainer, 100, mr, Clock.systemUTC());
+ updater = new NodeAdminStateUpdater(nodeRepositoryMock, nodeAdmin, storageMaintainer,
clock, orchestratorMock, "basehostname");
updater.start(5);
}
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 bbfd0f73fd3..d3bce7919e6 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
@@ -7,12 +7,13 @@ import com.yahoo.test.ManualClock;
import com.yahoo.vespa.hosted.dockerapi.ContainerName;
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;
+import com.yahoo.vespa.hosted.node.admin.maintenance.acl.AclMaintainer;
import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgent;
import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentImpl;
import org.junit.Test;
import org.mockito.InOrder;
-import java.time.Clock;
import java.time.Duration;
import java.util.ArrayList;
import java.util.Collections;
@@ -45,15 +46,17 @@ import static org.mockito.Mockito.when;
public class NodeAdminImplTest {
// Trick to allow mocking of typed interface without casts/warnings.
private interface NodeAgentFactory extends Function<String, NodeAgent> {}
+ private final DockerOperations dockerOperations = mock(DockerOperations.class);
+ private final Function<String, NodeAgent> nodeAgentFactory = mock(NodeAgentFactory.class);
+ private final StorageMaintainer storageMaintainer = mock(StorageMaintainer.class);
+ private final AclMaintainer aclMaintainer = mock(AclMaintainer.class);
+ private final ManualClock clock = new ManualClock();
+
+ private final NodeAdminImpl nodeAdmin = new NodeAdminImpl(dockerOperations, nodeAgentFactory, storageMaintainer, aclMaintainer,
+ 100, new MetricReceiverWrapper(MetricReceiver.nullImplementation), clock);
@Test
public void nodeAgentsAreProperlyLifeCycleManaged() throws Exception {
- final DockerOperations dockerOperations = mock(DockerOperations.class);
- final Function<String, NodeAgent> nodeAgentFactory = mock(NodeAgentFactory.class);
-
- final NodeAdminImpl nodeAdmin = new NodeAdminImpl(dockerOperations, nodeAgentFactory, Optional.empty(), 100,
- new MetricReceiverWrapper(MetricReceiver.nullImplementation), Optional.empty(), Clock.systemUTC());
-
final String hostName1 = "host1.test.yahoo.com";
final String hostName2 = "host2.test.yahoo.com";
final ContainerName containerName1 = ContainerName.fromHostname(hostName1);
@@ -98,12 +101,6 @@ public class NodeAdminImplTest {
@Test
public void testSetFrozen() throws Exception {
- final DockerOperations dockerOperations = mock(DockerOperations.class);
- final Function<String, NodeAgent> nodeAgentFactory = mock(NodeAgentFactory.class);
-
- final NodeAdminImpl nodeAdmin = new NodeAdminImpl(dockerOperations, nodeAgentFactory, Optional.empty(), 100,
- new MetricReceiverWrapper(MetricReceiver.nullImplementation), Optional.empty(), Clock.systemUTC());
-
List<NodeAgent> nodeAgents = new ArrayList<>();
List<String> existingContainerHostnames = new ArrayList<>();
for (int i = 0; i < 3; i++) {
@@ -153,18 +150,6 @@ public class NodeAdminImplTest {
@Test
public void testSubsystemFreezeDuration() {
- final DockerOperations dockerOperations = mock(DockerOperations.class);
- final Function<String, NodeAgent> nodeAgentFactory = mock(NodeAgentFactory.class);
- final ManualClock clock = new ManualClock();
- final NodeAdminImpl nodeAdmin = new NodeAdminImpl(
- dockerOperations,
- nodeAgentFactory,
- Optional.empty(),
- 100,
- new MetricReceiverWrapper(MetricReceiver.nullImplementation),
- Optional.empty(),
- clock);
-
// Initially everything is frozen to force convergence
assertTrue(nodeAdmin.isFrozen());
assertTrue(nodeAdmin.subsystemFreezeDuration().isZero());
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterTest.java
index 712000a8cb7..f2d5c7e3ade 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterTest.java
@@ -3,6 +3,7 @@ package com.yahoo.vespa.hosted.node.admin.nodeadmin;
import com.yahoo.test.ManualClock;
import com.yahoo.vespa.hosted.node.admin.ContainerNodeSpec;
+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;
@@ -14,7 +15,6 @@ import java.time.Duration;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
-import java.util.Optional;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
@@ -40,9 +40,10 @@ public class NodeAdminStateUpdaterTest {
private final ManualClock clock = new ManualClock();
private final NodeRepository nodeRepository = mock(NodeRepository.class);
private final NodeAdmin nodeAdmin = mock(NodeAdmin.class);
+ private final StorageMaintainer storageMaintainer = mock(StorageMaintainer.class);
private final Orchestrator orchestrator = mock(Orchestrator.class);
private final NodeAdminStateUpdater refresher = spy(new NodeAdminStateUpdater(
- nodeRepository, nodeAdmin, Optional.empty(), clock, orchestrator, parentHostname));
+ nodeRepository, nodeAdmin, storageMaintainer, clock, orchestrator, parentHostname));
@Test
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 09e897e1fc2..fd3e72d7eac 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
@@ -621,6 +621,6 @@ public class NodeAgentImplTest {
doNothing().when(storageMaintainer).writeMetricsConfig(any(), any());
return new NodeAgentImpl(hostName, nodeRepository, orchestrator, dockerOperations,
- Optional.of(storageMaintainer), environment, clock, Optional.of(aclMaintainer));
+ storageMaintainer, aclMaintainer, environment, clock);
}
}