summaryrefslogtreecommitdiffstats
path: root/node-admin
diff options
context:
space:
mode:
authorHÃ¥kon Hallingstad <hakon@oath.com>2017-12-21 16:32:40 +0100
committerGitHub <noreply@github.com>2017-12-21 16:32:40 +0100
commitef95e466371ef2f72988c67a3606a34adb3ee59c (patch)
tree54c97e359a4139993a31f1c53b2177b4137cfcf0 /node-admin
parentf5b02d38ee824da0b7eb3616b9f6b07b561719fc (diff)
Revert "Revert "Revert "Prepare for making node admin components optional"""
Diffstat (limited to 'node-admin')
-rw-r--r--node-admin/src/main/application/services.xml2
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/bootstrap/NodeAdminComponent.java29
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/bootstrap/NodeAdminConfig.java26
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/bootstrap/NodeAdminMain.java113
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/restapi/RestApiHandler.java5
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerMock.java3
6 files changed, 3 insertions, 175 deletions
diff --git a/node-admin/src/main/application/services.xml b/node-admin/src/main/application/services.xml
index b39a9bce30a..030c42ac8c5 100644
--- a/node-admin/src/main/application/services.xml
+++ b/node-admin/src/main/application/services.xml
@@ -6,7 +6,7 @@
<handler id="com.yahoo.vespa.hosted.node.admin.restapi.RestApiHandler" bundle="node-admin">
<binding>http://*/rest/*</binding>
</handler>
- <component id="node-admin" class="com.yahoo.vespa.hosted.node.admin.bootstrap.NodeAdminComponent" bundle="node-admin"/>
+ <component id="node-admin" class="com.yahoo.vespa.hosted.node.admin.provider.NodeAdminProvider" bundle="node-admin"/>
<component id="docker-api" class="com.yahoo.vespa.hosted.dockerapi.DockerImpl" bundle="docker-api"/>
<component id="metrics-wrapper" class="com.yahoo.vespa.hosted.dockerapi.metrics.MetricReceiverWrapper" bundle="docker-api"/>
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/bootstrap/NodeAdminComponent.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/bootstrap/NodeAdminComponent.java
deleted file mode 100644
index fbcee36b724..00000000000
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/bootstrap/NodeAdminComponent.java
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2017 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.bootstrap;
-
-import com.google.inject.Inject;
-import com.yahoo.concurrent.classlock.ClassLocking;
-import com.yahoo.container.di.componentgraph.Provider;
-import com.yahoo.vespa.hosted.dockerapi.Docker;
-import com.yahoo.vespa.hosted.dockerapi.metrics.MetricReceiverWrapper;
-
-public class NodeAdminComponent implements Provider<NodeAdminMain> {
- private final NodeAdminMain nodeAdminMain;
-
- @Inject
- NodeAdminComponent(Docker docker,
- MetricReceiverWrapper metricReceiver,
- ClassLocking classLocking) {
- this.nodeAdminMain = new NodeAdminMain(docker, metricReceiver, classLocking);
- }
-
- @Override
- public NodeAdminMain get() {
- return nodeAdminMain;
- }
-
- @Override
- public void deconstruct() {
- nodeAdminMain.close();
- }
-}
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/bootstrap/NodeAdminConfig.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/bootstrap/NodeAdminConfig.java
deleted file mode 100644
index f8d5962fc3f..00000000000
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/bootstrap/NodeAdminConfig.java
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright 2017 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.bootstrap;
-
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.databind.ObjectMapper;
-
-@JsonIgnoreProperties(ignoreUnknown = true)
-@JsonInclude(value = JsonInclude.Include.NON_NULL)
-public class NodeAdminConfig {
- private static final ObjectMapper mapper = new ObjectMapper();
-
- enum Mode {
- TENANT,
- CONFIG_SERVER_HOST
- }
-
- @JsonProperty("mode")
- public Mode mode = Mode.TENANT;
-
- public static NodeAdminConfig get() {
- // TODO: Get config from file
- return new NodeAdminConfig();
- }
-}
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/bootstrap/NodeAdminMain.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/bootstrap/NodeAdminMain.java
deleted file mode 100644
index 87c3f5452ed..00000000000
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/bootstrap/NodeAdminMain.java
+++ /dev/null
@@ -1,113 +0,0 @@
-// Copyright 2017 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.bootstrap;
-
-import com.yahoo.concurrent.classlock.ClassLocking;
-import com.yahoo.net.HostName;
-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.docker.DockerOperations;
-import com.yahoo.vespa.hosted.node.admin.docker.DockerOperationsImpl;
-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;
-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.util.ConfigServerHttpRequestExecutor;
-import com.yahoo.vespa.hosted.node.admin.util.Environment;
-
-import java.time.Clock;
-import java.time.Duration;
-import java.util.function.Function;
-
-/**
- * NodeAdminMain is the main component of the node admin JDisc application:
- * - It will read config and check its environment to figure out its responsibilities
- * - It will "start" (only) the necessary components.
- * - Other components MUST NOT try to start (typically in constructor) since the features
- * they provide is NOT WANTED and possibly destructive, and/or the environment may be
- * incompatible. For instance, trying to contact the Docker daemon too early will
- * be fatal: the node admin may not have installed and started the docker daemon.
- */
-public class NodeAdminMain implements AutoCloseable {
- private static final Duration NODE_AGENT_SCAN_INTERVAL = Duration.ofSeconds(30);
- private static final Duration NODE_ADMIN_CONVERGE_STATE_INTERVAL = Duration.ofSeconds(30);
-
- private final Docker docker;
- private final MetricReceiverWrapper metricReceiver;
- private final ClassLocking classLocking;
-
- private NodeAdminStateUpdater nodeAdminStateUpdater;
-
- NodeAdminMain(Docker docker, MetricReceiverWrapper metricReceiver, ClassLocking classLocking) {
- this.docker = docker;
- this.metricReceiver = metricReceiver;
- this.classLocking = classLocking;
- start();
- }
-
- @Override
- public void close() {
- nodeAdminStateUpdater.stop();
- }
-
- public NodeAdminStateUpdater getNodeAdminStateUpdater() {
- return nodeAdminStateUpdater;
- }
-
- public void start() {
- NodeAdminConfig config = NodeAdminConfig.get();
-
- switch (config.mode) {
- case TENANT:
- setupTenantHostNodeAdmin();
- break;
- case CONFIG_SERVER_HOST:
- setupConfigServerHostNodeAdmin();
- break;
- default:
- throw new IllegalStateException(
- "Unknown bootstrap mode: " + config.mode.name());
- }
- }
-
- private void setupTenantHostNodeAdmin() {
- Clock clock = Clock.systemUTC();
- String dockerHostHostName = HostName.getLocalhost();
- ProcessExecuter processExecuter = new ProcessExecuter();
- Environment environment = new Environment();
-
- ConfigServerHttpRequestExecutor requestExecutor = ConfigServerHttpRequestExecutor.create(environment.getConfigServerUris());
- NodeRepository nodeRepository = new NodeRepositoryImpl(requestExecutor);
- Orchestrator orchestrator = new OrchestratorImpl(requestExecutor);
- DockerOperations dockerOperations = new DockerOperationsImpl(docker, environment, processExecuter);
-
- StorageMaintainer storageMaintainer = new StorageMaintainer(docker, processExecuter, metricReceiver, environment, clock);
- AclMaintainer aclMaintainer = new AclMaintainer(dockerOperations, nodeRepository, dockerHostHostName);
-
- Function<String, NodeAgent> nodeAgentFactory =
- (hostName) -> new NodeAgentImpl(hostName, nodeRepository, orchestrator, dockerOperations,
- storageMaintainer, aclMaintainer, environment, clock, NODE_AGENT_SCAN_INTERVAL);
- NodeAdmin nodeAdmin = new NodeAdminImpl(dockerOperations, nodeAgentFactory, storageMaintainer, aclMaintainer,
- metricReceiver, clock);
-
- nodeAdminStateUpdater = new NodeAdminStateUpdater(nodeRepository, orchestrator, storageMaintainer, nodeAdmin,
- dockerHostHostName, clock, NODE_ADMIN_CONVERGE_STATE_INTERVAL, classLocking);
-
- nodeAdminStateUpdater.start();
- }
-
- private void setupConfigServerHostNodeAdmin() {
- // TODO:
- // - install and start docker daemon
- // - Read config that specifies which containers to start how
- // - use thin static backends for node repo, orchestrator, and others
- // - Start core node admin.
- }
-}
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/restapi/RestApiHandler.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/restapi/RestApiHandler.java
index b7377ff172c..42b36d95374 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/restapi/RestApiHandler.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/restapi/RestApiHandler.java
@@ -9,7 +9,6 @@ import com.yahoo.container.jdisc.LoggingRequestHandler;
import com.yahoo.container.logging.AccessLog;
import com.yahoo.vespa.hosted.dockerapi.metrics.DimensionMetrics;
import com.yahoo.vespa.hosted.dockerapi.metrics.MetricReceiverWrapper;
-import com.yahoo.vespa.hosted.node.admin.bootstrap.NodeAdminMain;
import com.yahoo.vespa.hosted.node.admin.nodeadmin.NodeAdminStateUpdater;
import javax.inject.Inject;
@@ -39,10 +38,10 @@ public class RestApiHandler extends LoggingRequestHandler{
@Inject
public RestApiHandler(Executor executor, AccessLog accessLog,
- NodeAdminMain nodeAdminMain,
+ NodeAdminStateUpdater nodeAdminStateUpdater,
MetricReceiverWrapper metricReceiverWrapper) {
super(executor, accessLog);
- this.refresher = nodeAdminMain.getNodeAdminStateUpdater();
+ this.refresher = nodeAdminStateUpdater;
this.metricReceiverWrapper = metricReceiverWrapper;
}
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerMock.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerMock.java
index 7a5d713936d..a1cc1850d23 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerMock.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerMock.java
@@ -33,9 +33,6 @@ public class DockerMock implements Docker {
}
@Override
- public void start() { }
-
- @Override
public CreateContainerCommand createContainerCommand(
DockerImage dockerImage,
ContainerResources containerResources,