summaryrefslogtreecommitdiffstats
path: root/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminMain.java
diff options
context:
space:
mode:
Diffstat (limited to 'node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminMain.java')
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminMain.java77
1 files changed, 33 insertions, 44 deletions
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminMain.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminMain.java
index 4ee84d12b1d..3e9cb239890 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminMain.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminMain.java
@@ -10,11 +10,9 @@ import com.yahoo.vespa.hosted.dockerapi.Docker;
import com.yahoo.vespa.hosted.dockerapi.metrics.MetricReceiverWrapper;
import com.yahoo.vespa.hosted.node.admin.ConfigServerConfig;
import com.yahoo.vespa.hosted.node.admin.component.AdminComponent;
+import com.yahoo.vespa.hosted.node.admin.provider.NodeAdminStateUpdater;
import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Optional;
import java.util.logging.Logger;
import java.util.stream.Collectors;
@@ -24,8 +22,8 @@ import java.util.stream.Collectors;
* - 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.
+ * 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 Logger logger = Logger.getLogger(NodeAdminMain.class.getName());
@@ -36,9 +34,7 @@ public class NodeAdminMain implements AutoCloseable {
private final MetricReceiverWrapper metricReceiver;
private final ClassLocking classLocking;
- private List<AdminComponent> enabledComponents = new ArrayList<>();
-
- private Optional<DockerAdminComponent> dockerAdmin = Optional.empty();
+ private AdminComponent mainAdminComponent = null;
public NodeAdminMain(ComponentRegistry<AdminComponent> adminRegistry,
ConfigServerConfig configServerConfig,
@@ -59,53 +55,46 @@ public class NodeAdminMain implements AutoCloseable {
public void start() {
NodeAdminConfig config = getConfig();
+ mainAdminComponent = selectAdminComponent(config);
+ mainAdminComponent.enable();
+ }
- if (config.components.isEmpty()) {
- dockerAdmin = Optional.of(new DockerAdminComponent(
- configServerConfig, config, docker, metricReceiver, classLocking));
- enable(dockerAdmin.get());
- } else {
- logger.log(LogLevel.INFO, () -> {
- String registeredComponentsList = adminRegistry
- .allComponentsById().keySet().stream()
- .map(ComponentId::stringValue)
- .collect(Collectors.joining(", "));
-
- String requestedComponentsList = config.components.stream()
- .collect(Collectors.joining(", "));
-
- return String.format(
- "Components registered = '%s', enabled = '%s'",
- registeredComponentsList,
- requestedComponentsList);
- });
+ private AdminComponent selectAdminComponent(NodeAdminConfig config) {
+ if (config.mainComponent == null) {
+ return new DockerAdminComponent(configServerConfig, config, docker, metricReceiver, classLocking);
+ }
- for (String componentSpecificationString : config.components) {
- AdminComponent component =
- adminRegistry.getComponent(componentSpecificationString);
- if (component == null) {
- throw new IllegalArgumentException("There is no component named '" +
- componentSpecificationString + "'");
- }
- enable(component);
- }
+ logger.log(LogLevel.INFO, () -> {
+ String registeredComponentsList = adminRegistry
+ .allComponentsById().keySet().stream()
+ .map(ComponentId::stringValue)
+ .collect(Collectors.joining(", "));
+
+ return String.format(
+ "Components registered = '%s', enabled = '%s'",
+ registeredComponentsList,
+ config.mainComponent);
+ });
+
+ AdminComponent component = adminRegistry.getComponent(config.mainComponent);
+ if (component == null) {
+ throw new IllegalArgumentException("There is no component named '" +
+ config.mainComponent + "'");
}
- }
- private void enable(AdminComponent component) {
- component.enable();
- enabledComponents.add(component);
+ return component;
}
@Override
public void close() {
- int i = enabledComponents.size();
- while (i --> 0) {
- enabledComponents.remove(i).disable();
+ if (mainAdminComponent != null) {
+ mainAdminComponent.disable();
+ mainAdminComponent = null;
}
}
public NodeAdminStateUpdater getNodeAdminStateUpdater() {
- return dockerAdmin.get().getNodeAdminStateUpdater();
+ assert mainAdminComponent != null : "start() hasn't been called yet";
+ return mainAdminComponent.getNodeAdminStateUpdater();
}
}