summaryrefslogtreecommitdiffstats
path: root/node-admin
diff options
context:
space:
mode:
authorValerij Fredriksen <valerijf@oath.com>2018-02-15 15:56:38 +0100
committerValerij Fredriksen <valerijf@oath.com>2018-02-15 15:59:01 +0100
commit9777c28e5c78f064ac401a007923388126505000 (patch)
tree370b5dc5d4435f2c9775bcb2bb2c72d73d2e90c2 /node-admin
parentc6df3e8e2178702bbe708360871890a2e7b4cba5 (diff)
Add ConfigServerClients
Diffstat (limited to 'node-admin')
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/component/DockerAdminComponent.java30
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/ConfigServerClients.java15
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/ConfigServerClientsImpl.java58
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterImpl.java38
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java25
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerTester.java9
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RunInContainerTest.java15
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterImplTest.java5
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java5
9 files changed, 134 insertions, 66 deletions
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> classLocking;
private Optional<Environment> environment = Optional.empty();
- private Optional<ConfigServerHttpRequestExecutor> requestExecutor = Optional.empty();
+ private Optional<ConfigServerClients> configServerClients = Optional.empty();
private Optional<NodeAdminStateUpdaterImpl> 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<String, NodeAgent> 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> 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> 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> 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<String> 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<ContainerNodeSpec> containersToRun = nodeRepository.getContainersToRun(dockerHostHostName);
+ final List<ContainerNodeSpec> 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<String> 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<ContainerNodeSpec> nodeSpecOptional = nodeRepository.getContainerNodeSpec(hostname);
+ final Optional<ContainerNodeSpec> 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<String, NodeAgent> nodeAgentFactory = (hostName) -> new NodeAgentImpl(hostName, nodeRepositoryMock,
- orchestratorMock, dockerOperations, storageMaintainer, aclMaintainer, environment, clock, NODE_AGENT_SCAN_INTERVAL);
+ Function<String, NodeAgent> 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<String, NodeAgent> 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);
}
}