From 9777c28e5c78f064ac401a007923388126505000 Mon Sep 17 00:00:00 2001 From: Valerij Fredriksen Date: Thu, 15 Feb 2018 15:56:38 +0100 Subject: Add ConfigServerClients --- .../node/admin/component/DockerAdminComponent.java | 30 ++++------- .../admin/configserver/ConfigServerClients.java | 15 ++++++ .../configserver/ConfigServerClientsImpl.java | 58 ++++++++++++++++++++++ .../admin/nodeadmin/NodeAdminStateUpdaterImpl.java | 38 +++++++------- .../hosted/node/admin/nodeagent/NodeAgentImpl.java | 25 ++++------ .../node/admin/integrationTests/DockerTester.java | 9 ++-- .../admin/integrationTests/RunInContainerTest.java | 15 +++--- .../nodeadmin/NodeAdminStateUpdaterImplTest.java | 5 +- .../node/admin/nodeagent/NodeAgentImplTest.java | 5 +- 9 files changed, 134 insertions(+), 66 deletions(-) create mode 100644 node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/ConfigServerClients.java create mode 100644 node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/ConfigServerClientsImpl.java (limited to 'node-admin') diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/component/DockerAdminComponent.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/component/DockerAdminComponent.java index a678b8607fd..900ac494c60 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/component/DockerAdminComponent.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/component/DockerAdminComponent.java @@ -7,6 +7,8 @@ import com.yahoo.system.ProcessExecuter; import com.yahoo.vespa.hosted.dockerapi.Docker; import com.yahoo.vespa.hosted.dockerapi.metrics.MetricReceiverWrapper; import com.yahoo.vespa.hosted.node.admin.config.ConfigServerConfig; +import com.yahoo.vespa.hosted.node.admin.configserver.ConfigServerClients; +import com.yahoo.vespa.hosted.node.admin.configserver.ConfigServerClientsImpl; 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.StorageMaintainer; @@ -16,12 +18,7 @@ import com.yahoo.vespa.hosted.node.admin.nodeadmin.NodeAdminImpl; import com.yahoo.vespa.hosted.node.admin.nodeadmin.NodeAdminStateUpdaterImpl; import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgent; import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentImpl; -import com.yahoo.vespa.hosted.node.admin.noderepository.NodeRepository; -import com.yahoo.vespa.hosted.node.admin.noderepository.NodeRepositoryImpl; -import com.yahoo.vespa.hosted.node.admin.orchestrator.Orchestrator; -import com.yahoo.vespa.hosted.node.admin.orchestrator.OrchestratorImpl; import com.yahoo.vespa.hosted.node.admin.provider.NodeAdminStateUpdater; -import com.yahoo.vespa.hosted.node.admin.util.ConfigServerHttpRequestExecutor; import java.time.Clock; import java.time.Duration; @@ -41,7 +38,7 @@ public class DockerAdminComponent implements AdminComponent { private final Optional classLocking; private Optional environment = Optional.empty(); - private Optional requestExecutor = Optional.empty(); + private Optional configServerClients = Optional.empty(); private Optional nodeAdminStateUpdater = Optional.empty(); public DockerAdminComponent(ConfigServerConfig configServerConfig, @@ -85,17 +82,10 @@ public class DockerAdminComponent implements AdminComponent { environment = Optional.of(new Environment(configServerConfig)); } - if (!requestExecutor.isPresent()) { - requestExecutor = Optional.of(ConfigServerHttpRequestExecutor.create( - environment.get().getConfigServerUris(), - environment.get().getKeyStoreOptions(), - environment.get().getTrustStoreOptions(), - environment.get().getAthenzIdentity())); + if (!configServerClients.isPresent()) { + configServerClients = Optional.of(new ConfigServerClientsImpl(environment.get())); } - NodeRepository nodeRepository = new NodeRepositoryImpl(requestExecutor.get()); - Orchestrator orchestrator = new OrchestratorImpl(requestExecutor.get()); - Clock clock = Clock.systemUTC(); String dockerHostHostName = HostName.getLocalhost(); ProcessExecuter processExecuter = new ProcessExecuter(); @@ -115,13 +105,12 @@ public class DockerAdminComponent implements AdminComponent { AclMaintainer aclMaintainer = new AclMaintainer( dockerOperations, - nodeRepository, + configServerClients.get().nodeRepository(), dockerHostHostName); Function nodeAgentFactory = (hostName) -> new NodeAgentImpl( hostName, - nodeRepository, - orchestrator, + configServerClients.get(), dockerOperations, storageMaintainer, aclMaintainer, @@ -138,8 +127,7 @@ public class DockerAdminComponent implements AdminComponent { clock); return new NodeAdminStateUpdaterImpl( - nodeRepository, - orchestrator, + configServerClients.get(), storageMaintainer, nodeAdmin, dockerHostHostName, @@ -155,7 +143,7 @@ public class DockerAdminComponent implements AdminComponent { } nodeAdminStateUpdater.ifPresent(NodeAdminStateUpdaterImpl::stop); - requestExecutor.ifPresent(ConfigServerHttpRequestExecutor::close); + configServerClients.ifPresent(ConfigServerClients::stop); nodeAdminStateUpdater = Optional.empty(); } diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/ConfigServerClients.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/ConfigServerClients.java new file mode 100644 index 00000000000..9686ddb0494 --- /dev/null +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/ConfigServerClients.java @@ -0,0 +1,15 @@ +// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.hosted.node.admin.configserver; + +import com.yahoo.vespa.hosted.node.admin.noderepository.NodeRepository; +import com.yahoo.vespa.hosted.node.admin.orchestrator.Orchestrator; + +/** + * @author freva + */ +public interface ConfigServerClients { + NodeRepository nodeRepository(); + Orchestrator orchestrator(); + + void stop(); +} diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/ConfigServerClientsImpl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/ConfigServerClientsImpl.java new file mode 100644 index 00000000000..ae1a5f31c87 --- /dev/null +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/ConfigServerClientsImpl.java @@ -0,0 +1,58 @@ +// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.hosted.node.admin.configserver; + +import com.yahoo.vespa.hosted.node.admin.component.Environment; +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; +import com.yahoo.vespa.hosted.node.admin.orchestrator.OrchestratorImpl; +import org.bouncycastle.jce.provider.BouncyCastleProvider; + +import java.security.Security; +import java.util.Optional; + +/** + * @author freva + */ +public class ConfigServerClientsImpl implements ConfigServerClients { + + private final Optional configServerApi; + private final NodeRepository nodeRepository; + private final Orchestrator orchestrator; + + public ConfigServerClientsImpl(Environment environment) { + this(new SslConfigServerApiImpl(environment)); + } + + public ConfigServerClientsImpl(NodeRepository nodeRepository, Orchestrator orchestrator) { + this(nodeRepository, orchestrator, Optional.empty()); + } + + private ConfigServerClientsImpl(ConfigServerApi configServerApi) { + this(new NodeRepositoryImpl(configServerApi), new OrchestratorImpl(configServerApi), Optional.of(configServerApi)); + } + + private ConfigServerClientsImpl(NodeRepository nodeRepository, Orchestrator orchestrator, + Optional configServerApi) { + Security.addProvider(new BouncyCastleProvider()); + + this.nodeRepository = nodeRepository; + this.orchestrator = orchestrator; + this.configServerApi = configServerApi; + } + + @Override + public NodeRepository nodeRepository() { + return nodeRepository; + } + + @Override + public Orchestrator orchestrator() { + return orchestrator; + } + + @Override + public void stop() { + configServerApi.ifPresent(ConfigServerApi::stop); + } +} diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterImpl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterImpl.java index 6db72f7bdf2..ea8c29a561d 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterImpl.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterImpl.java @@ -7,13 +7,12 @@ import com.yahoo.concurrent.classlock.ClassLocking; import com.yahoo.concurrent.classlock.LockInterruptException; import com.yahoo.log.LogLevel; import com.yahoo.vespa.hosted.node.admin.ContainerNodeSpec; +import com.yahoo.vespa.hosted.node.admin.configserver.ConfigServerClients; import com.yahoo.vespa.hosted.node.admin.maintenance.StorageMaintainer; import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAttributes; -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; import com.yahoo.vespa.hosted.node.admin.provider.NodeAdminStateUpdater; -import com.yahoo.vespa.hosted.node.admin.util.HttpException; +import com.yahoo.vespa.hosted.node.admin.configserver.HttpException; import com.yahoo.vespa.hosted.provision.Node; import java.time.Clock; @@ -56,8 +55,7 @@ public class NodeAdminStateUpdaterImpl implements NodeAdminStateUpdater { Executors.newScheduledThreadPool(1, ThreadFactoryFactory.getDaemonThreadFactory("specverifier")); private final Thread loopThread; - private final NodeRepository nodeRepository; - private final Orchestrator orchestrator; + private final ConfigServerClients configServerClients; private final NodeAdmin nodeAdmin; private final Clock clock; private final String dockerHostHostName; @@ -68,8 +66,7 @@ public class NodeAdminStateUpdaterImpl implements NodeAdminStateUpdater { private Instant lastTick; public NodeAdminStateUpdaterImpl( - NodeRepository nodeRepository, - Orchestrator orchestrator, + ConfigServerClients configServerClients, StorageMaintainer storageMaintainer, NodeAdmin nodeAdmin, String dockerHostHostName, @@ -77,8 +74,7 @@ public class NodeAdminStateUpdaterImpl implements NodeAdminStateUpdater { Duration nodeAdminConvergeStateInterval, Optional classLocking) { log.info(objectToString() + ": Creating object"); - this.nodeRepository = nodeRepository; - this.orchestrator = orchestrator; + this.configServerClients = configServerClients; this.nodeAdmin = nodeAdmin; this.dockerHostHostName = dockerHostHostName; this.clock = clock; @@ -129,14 +125,14 @@ public class NodeAdminStateUpdaterImpl implements NodeAdminStateUpdater { if (currentState != RESUMED) return; try { - ContainerNodeSpec nodeSpec = nodeRepository.getContainerNodeSpec(dockerHostHostName) + ContainerNodeSpec nodeSpec = configServerClients.nodeRepository().getContainerNodeSpec(dockerHostHostName) .orElseThrow(() -> new RuntimeException("Failed to get host's node spec from node-repo")); String hardwareDivergence = maintainer.getHardwareDivergence(nodeSpec); // Only update hardware divergence if there is a change. if (!nodeSpec.hardwareDivergence.orElse("null").equals(hardwareDivergence)) { NodeAttributes nodeAttributes = new NodeAttributes().withHardwareDivergence(hardwareDivergence); - nodeRepository.updateNodeAttributes(dockerHostHostName, nodeAttributes); + configServerClients.nodeRepository().updateNodeAttributes(dockerHostHostName, nodeAttributes); } } catch (RuntimeException e) { log.log(Level.WARNING, "Failed to report hardware divergence", e); @@ -224,10 +220,10 @@ public class NodeAdminStateUpdaterImpl implements NodeAdminStateUpdater { switch (wantedState) { case RESUMED: - orchestrator.resume(dockerHostHostName); + configServerClients.orchestrator().resume(dockerHostHostName); break; case SUSPENDED_NODE_ADMIN: - orchestrator.suspend(dockerHostHostName); + configServerClients.orchestrator().suspend(dockerHostHostName); break; case SUSPENDED: // Fetch active nodes from node repo before suspending nodes. @@ -241,7 +237,7 @@ public class NodeAdminStateUpdaterImpl implements NodeAdminStateUpdater { List nodesToSuspend = new ArrayList<>(); nodesToSuspend.addAll(nodesInActiveState); nodesToSuspend.add(dockerHostHostName); - orchestrator.suspend(dockerHostHostName, nodesToSuspend); + configServerClients.orchestrator().suspend(dockerHostHostName, nodesToSuspend); log.info("Orchestrator allows suspension of " + nodesToSuspend); // The node agent services are stopped by this thread, which is OK only @@ -270,7 +266,8 @@ public class NodeAdminStateUpdaterImpl implements NodeAdminStateUpdater { } try { - final List containersToRun = nodeRepository.getContainersToRun(dockerHostHostName); + final List containersToRun = configServerClients.nodeRepository() + .getContainersToRun(dockerHostHostName); nodeAdmin.refreshContainersToRun(containersToRun); } catch (Exception e) { log.log(LogLevel.WARNING, "Failed to update which containers should be running", e); @@ -279,11 +276,12 @@ public class NodeAdminStateUpdaterImpl implements NodeAdminStateUpdater { } private List getNodesInActiveState() { - return nodeRepository.getContainersToRun(dockerHostHostName) - .stream() - .filter(nodespec -> nodespec.nodeState == Node.State.active) - .map(nodespec -> nodespec.hostname) - .collect(Collectors.toList()); + return configServerClients.nodeRepository() + .getContainersToRun(dockerHostHostName) + .stream() + .filter(nodespec -> nodespec.nodeState == Node.State.active) + .map(nodespec -> nodespec.hostname) + .collect(Collectors.toList()); } public void start() { 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 f05a4054924..3308272581a 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 @@ -15,10 +15,9 @@ import com.yahoo.vespa.hosted.dockerapi.metrics.DimensionMetrics; import com.yahoo.vespa.hosted.dockerapi.metrics.Dimensions; import com.yahoo.vespa.hosted.dockerapi.metrics.MetricReceiverWrapper; import com.yahoo.vespa.hosted.node.admin.ContainerNodeSpec; +import com.yahoo.vespa.hosted.node.admin.configserver.ConfigServerClients; 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.noderepository.NodeRepository; -import com.yahoo.vespa.hosted.node.admin.orchestrator.Orchestrator; import com.yahoo.vespa.hosted.node.admin.orchestrator.OrchestratorException; import com.yahoo.vespa.hosted.node.admin.component.Environment; import com.yahoo.vespa.hosted.node.admin.util.PrefixLogger; @@ -67,8 +66,7 @@ public class NodeAgentImpl implements NodeAgent { private final ContainerName containerName; private final String hostname; - private final NodeRepository nodeRepository; - private final Orchestrator orchestrator; + private final ConfigServerClients configServerClients; private final DockerOperations dockerOperations; private final StorageMaintainer storageMaintainer; private final Runnable aclMaintainer; @@ -112,8 +110,7 @@ public class NodeAgentImpl implements NodeAgent { public NodeAgentImpl( final String hostName, - final NodeRepository nodeRepository, - final Orchestrator orchestrator, + final ConfigServerClients configServerClients, final DockerOperations dockerOperations, final StorageMaintainer storageMaintainer, final Runnable aclMaintainer, @@ -123,8 +120,7 @@ public class NodeAgentImpl implements NodeAgent { this.containerName = ContainerName.fromHostname(hostName); this.logger = PrefixLogger.getNodeAgentLogger(NodeAgentImpl.class, containerName); this.hostname = hostName; - this.nodeRepository = nodeRepository; - this.orchestrator = orchestrator; + this.configServerClients = configServerClients; this.dockerOperations = dockerOperations; this.storageMaintainer = storageMaintainer; this.aclMaintainer = aclMaintainer; @@ -248,7 +244,7 @@ public class NodeAgentImpl implements NodeAgent { + lastAttributesSet + " -> " + currentAttributes); addDebugMessage("Publishing new set of attributes to node repo: {" + lastAttributesSet + "} -> {" + currentAttributes + "}"); - nodeRepository.updateNodeAttributes(hostname, currentAttributes); + configServerClients.nodeRepository().updateNodeAttributes(hostname, currentAttributes); lastAttributesSet = currentAttributes; } } @@ -430,7 +426,8 @@ public class NodeAgentImpl implements NodeAgent { // Public for testing void converge() { - final Optional nodeSpecOptional = nodeRepository.getContainerNodeSpec(hostname); + final Optional nodeSpecOptional = configServerClients.nodeRepository() + .getContainerNodeSpec(hostname); // We just removed the node from node repo, so this is expected until NodeAdmin stop this NodeAgent if (!nodeSpecOptional.isPresent() && expectNodeNotInNodeRepo) return; @@ -493,21 +490,21 @@ public class NodeAgentImpl implements NodeAgent { // to allow upgrade (suspend). updateNodeRepoWithCurrentAttributes(nodeSpec); logger.info("Call resume against Orchestrator"); - orchestrator.resume(hostname); + configServerClients.orchestrator().resume(hostname); break; case inactive: removeContainerIfNeededUpdateContainerState(nodeSpec, container); updateNodeRepoWithCurrentAttributes(nodeSpec); break; case provisioned: - nodeRepository.markAsDirty(hostname); + configServerClients.nodeRepository().markAsDirty(hostname); break; case dirty: removeContainerIfNeededUpdateContainerState(nodeSpec, container); logger.info("State is " + nodeSpec.nodeState + ", will delete application storage and mark node as ready"); storageMaintainer.cleanupNodeStorage(containerName, nodeSpec); updateNodeRepoWithCurrentAttributes(nodeSpec); - nodeRepository.markNodeAvailableForNewAllocation(hostname); + configServerClients.nodeRepository().markNodeAvailableForNewAllocation(hostname); expectNodeNotInNodeRepo = true; break; default: @@ -670,6 +667,6 @@ public class NodeAgentImpl implements NodeAgent { // needs to contain routines for drain and suspend. For many images, these can just be dummy routines. private void orchestratorSuspendNode() { logger.info("Ask Orchestrator for permission to suspend node " + hostname); - orchestrator.suspend(hostname); + configServerClients.orchestrator().suspend(hostname); } } 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 d22cb968969..485d9ee09e8 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 @@ -6,6 +6,8 @@ import com.yahoo.metrics.simple.MetricReceiver; import com.yahoo.vespa.hosted.dockerapi.Docker; import com.yahoo.vespa.hosted.dockerapi.metrics.MetricReceiverWrapper; import com.yahoo.vespa.hosted.node.admin.ContainerNodeSpec; +import com.yahoo.vespa.hosted.node.admin.configserver.ConfigServerClients; +import com.yahoo.vespa.hosted.node.admin.configserver.ConfigServerClientsImpl; 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; @@ -44,6 +46,7 @@ public class DockerTester implements AutoCloseable { final NodeAdminStateUpdaterImpl nodeAdminStateUpdater; final NodeAdmin nodeAdmin; private final OrchestratorMock orchestratorMock = new OrchestratorMock(callOrderVerifier); + private final ConfigServerClients configServerClients = new ConfigServerClientsImpl(nodeRepositoryMock, orchestratorMock); DockerTester() { @@ -64,10 +67,10 @@ public class DockerTester implements AutoCloseable { MetricReceiverWrapper mr = new MetricReceiverWrapper(MetricReceiver.nullImplementation); - Function nodeAgentFactory = (hostName) -> new NodeAgentImpl(hostName, nodeRepositoryMock, - orchestratorMock, dockerOperations, storageMaintainer, aclMaintainer, environment, clock, NODE_AGENT_SCAN_INTERVAL); + Function nodeAgentFactory = (hostName) -> new NodeAgentImpl(hostName, configServerClients, + dockerOperations, storageMaintainer, aclMaintainer, environment, clock, NODE_AGENT_SCAN_INTERVAL); nodeAdmin = new NodeAdminImpl(dockerOperations, nodeAgentFactory, storageMaintainer, aclMaintainer, mr, Clock.systemUTC()); - nodeAdminStateUpdater = new NodeAdminStateUpdaterImpl(nodeRepositoryMock, orchestratorMock, storageMaintainer, + nodeAdminStateUpdater = new NodeAdminStateUpdaterImpl(configServerClients, storageMaintainer, nodeAdmin, "basehostname", clock, NODE_ADMIN_CONVERGE_STATE_INTERVAL, Optional.of(new ClassLocking())); nodeAdminStateUpdater.start(); diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RunInContainerTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RunInContainerTest.java index e4b6558e8e1..2e633859480 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RunInContainerTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RunInContainerTest.java @@ -10,6 +10,8 @@ import com.yahoo.vespa.hosted.dockerapi.ContainerName; import com.yahoo.vespa.hosted.dockerapi.DockerImage; import com.yahoo.vespa.hosted.dockerapi.metrics.MetricReceiverWrapper; import com.yahoo.vespa.hosted.node.admin.ContainerNodeSpec; +import com.yahoo.vespa.hosted.node.admin.configserver.ConfigServerClients; +import com.yahoo.vespa.hosted.node.admin.configserver.ConfigServerClientsImpl; 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; @@ -63,9 +65,10 @@ import static org.mockito.Mockito.when; public class RunInContainerTest { private final Logger logger = Logger.getLogger("RunInContainerTest"); - private static final NodeRepository nodeRepositoryMock = mock(NodeRepository.class); - private static final Orchestrator orchestratorMock = mock(Orchestrator.class); - private static final DockerOperations dockerOperationsMock = mock(DockerOperations.class); + private final NodeRepository nodeRepositoryMock = mock(NodeRepository.class); + private final Orchestrator orchestratorMock = mock(Orchestrator.class); + private final ConfigServerClients configServerClients = new ConfigServerClientsImpl(nodeRepositoryMock, orchestratorMock); + private final DockerOperations dockerOperationsMock = mock(DockerOperations.class); private final String parentHostname = "localhost.test.yahoo.com"; private JDisc container; @@ -240,11 +243,11 @@ public class RunInContainerTest { private final Environment environment = new Environment.Builder().build(); private final MetricReceiverWrapper mr = new MetricReceiverWrapper(MetricReceiver.nullImplementation); private final Function nodeAgentFactory = - (hostName) -> new NodeAgentImpl(hostName, nodeRepositoryMock, orchestratorMock, dockerOperationsMock, + (hostName) -> new NodeAgentImpl(hostName, configServerClients, dockerOperationsMock, storageMaintainer, aclMaintainer, environment, Clock.systemUTC(), NODE_AGENT_SCAN_INTERVAL); private final NodeAdmin nodeAdmin = new NodeAdminImpl(dockerOperationsMock, nodeAgentFactory, storageMaintainer, aclMaintainer, mr, Clock.systemUTC()); - private final NodeAdminStateUpdaterImpl nodeAdminStateUpdater = new NodeAdminStateUpdaterImpl(nodeRepositoryMock, - orchestratorMock, storageMaintainer, nodeAdmin, "localhost.test.yahoo.com", + private final NodeAdminStateUpdaterImpl nodeAdminStateUpdater = new NodeAdminStateUpdaterImpl( + configServerClients, storageMaintainer, nodeAdmin, "localhost.test.yahoo.com", Clock.systemUTC(), NODE_ADMIN_CONVERGE_STATE_INTERVAL, Optional.of(new ClassLocking())); public NodeAdminProviderWithMocks() { diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterImplTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterImplTest.java index ee34da99361..878ff8427de 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterImplTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterImplTest.java @@ -3,6 +3,8 @@ 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.configserver.ConfigServerClients; +import com.yahoo.vespa.hosted.node.admin.configserver.ConfigServerClientsImpl; 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; @@ -40,6 +42,7 @@ import static org.mockito.Mockito.when; public class NodeAdminStateUpdaterImplTest { private final NodeRepository nodeRepository = mock(NodeRepository.class); private final Orchestrator orchestrator = mock(Orchestrator.class); + private final ConfigServerClients configServerClients = new ConfigServerClientsImpl(nodeRepository, orchestrator); private final StorageMaintainer storageMaintainer = mock(StorageMaintainer.class); private final NodeAdmin nodeAdmin = mock(NodeAdmin.class); private final String parentHostname = "basehost1.test.yahoo.com"; @@ -47,7 +50,7 @@ public class NodeAdminStateUpdaterImplTest { private final Duration convergeStateInterval = Duration.ofSeconds(30); private final NodeAdminStateUpdaterImpl refresher = spy(new NodeAdminStateUpdaterImpl( - nodeRepository, orchestrator, storageMaintainer, nodeAdmin, parentHostname, clock, + configServerClients, storageMaintainer, nodeAdmin, parentHostname, clock, convergeStateInterval, Optional.empty())); 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 f1852fda8a3..4d527627ac4 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 @@ -12,6 +12,8 @@ import com.yahoo.vespa.hosted.dockerapi.Docker; import com.yahoo.vespa.hosted.dockerapi.DockerImage; import com.yahoo.vespa.hosted.dockerapi.metrics.MetricReceiverWrapper; import com.yahoo.vespa.hosted.node.admin.ContainerNodeSpec; +import com.yahoo.vespa.hosted.node.admin.configserver.ConfigServerClients; +import com.yahoo.vespa.hosted.node.admin.configserver.ConfigServerClientsImpl; 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; @@ -70,6 +72,7 @@ public class NodeAgentImplTest { private final DockerOperations dockerOperations = mock(DockerOperations.class); private final NodeRepository nodeRepository = mock(NodeRepository.class); private final Orchestrator orchestrator = mock(Orchestrator.class); + private final ConfigServerClients configServerClients = new ConfigServerClientsImpl(nodeRepository, orchestrator); private final StorageMaintainer storageMaintainer = mock(StorageMaintainer.class); private final MetricReceiverWrapper metricReceiver = new MetricReceiverWrapper(MetricReceiver.nullImplementation); private final AclMaintainer aclMaintainer = mock(AclMaintainer.class); @@ -661,7 +664,7 @@ public class NodeAgentImplTest { doNothing().when(storageMaintainer).writeFilebeatConfig(any(), any()); doNothing().when(storageMaintainer).writeMetricsConfig(any(), any()); - return new NodeAgentImpl(hostName, nodeRepository, orchestrator, dockerOperations, + return new NodeAgentImpl(hostName, configServerClients, dockerOperations, storageMaintainer, aclMaintainer, environment, clock, NODE_AGENT_SCAN_INTERVAL); } } -- cgit v1.2.3