diff options
author | Valerij Fredriksen <valerijf@oath.com> | 2017-09-18 10:34:33 +0200 |
---|---|---|
committer | Valerij Fredriksen <valerijf@oath.com> | 2017-09-18 10:34:33 +0200 |
commit | 5c48cdcd304dc826077d418a0a6a030dfaf7a74f (patch) | |
tree | a193d6bb73fb523f10437cfb608d2168806387f8 /node-admin | |
parent | 67e72cce03424c0d32d1c8c0de257b488c692b4b (diff) |
Remove isRunningLocally from Environment
Diffstat (limited to 'node-admin')
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); } } |