From 86dfbb00e3507dd6695cea9cf2b51bd2b8fa8c7c Mon Sep 17 00:00:00 2001 From: Harald Musum Date: Tue, 15 Dec 2020 14:54:38 +0100 Subject: Revert "Stop depending on ZooKeeperProvider" --- .../apps/clustercontroller/ClusterController.java | 12 +++++++++- .../clustercontroller/DummyZooKeeperProvider.java | 10 +++++++++ .../StandaloneZooKeeperProvider.java | 16 +++++++++++++ .../apps/clustercontroller/ZooKeeperProvider.java | 10 +++++++++ .../ClusterControllerContainer.java | 26 ++++++++++++++++------ 5 files changed, 66 insertions(+), 8 deletions(-) create mode 100644 clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/DummyZooKeeperProvider.java create mode 100644 clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/StandaloneZooKeeperProvider.java create mode 100644 clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/ZooKeeperProvider.java diff --git a/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/ClusterController.java b/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/ClusterController.java index 52a37c9489e..9020765f777 100644 --- a/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/ClusterController.java +++ b/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/ClusterController.java @@ -1,4 +1,4 @@ -// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.clustercontroller.apps.clustercontroller; import com.google.inject.Inject; @@ -29,11 +29,21 @@ public class ClusterController extends AbstractComponent private final Map controllers = new TreeMap<>(); private final Map status = new TreeMap<>(); + /** + * Dependency injection constructor for controller. {@link ZooKeeperProvider} argument given + * to ensure that zookeeper has started before we start polling it. + */ + @SuppressWarnings("unused") @Inject + public ClusterController(ZooKeeperProvider zooKeeperProvider) { + this(); + } + ClusterController() { metricWrapper = new JDiscMetricWrapper(null); } + public void setOptions(FleetControllerOptions options, Metric metricImpl) throws Exception { metricWrapper.updateMetricImplementation(metricImpl); verifyThatZooKeeperWorks(options); diff --git a/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/DummyZooKeeperProvider.java b/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/DummyZooKeeperProvider.java new file mode 100644 index 00000000000..f961297643e --- /dev/null +++ b/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/DummyZooKeeperProvider.java @@ -0,0 +1,10 @@ +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.clustercontroller.apps.clustercontroller; + +/** + * A dummy zookeeper provider when we do not run our own zookeeper instance. + * + * @author Ulf Lilleengen + */ +public class DummyZooKeeperProvider implements ZooKeeperProvider { +} diff --git a/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/StandaloneZooKeeperProvider.java b/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/StandaloneZooKeeperProvider.java new file mode 100644 index 00000000000..baad012a234 --- /dev/null +++ b/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/StandaloneZooKeeperProvider.java @@ -0,0 +1,16 @@ +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.clustercontroller.apps.clustercontroller; + +import com.yahoo.vespa.zookeeper.VespaZooKeeperServer; + +/** + * ZooKeeper provider that ensures we are running our own instance of zookeeper. + * + * @author Ulf Lilleengen + */ +public class StandaloneZooKeeperProvider implements ZooKeeperProvider { + + public StandaloneZooKeeperProvider(VespaZooKeeperServer server) { + } + +} diff --git a/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/ZooKeeperProvider.java b/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/ZooKeeperProvider.java new file mode 100644 index 00000000000..bb18bcc65d6 --- /dev/null +++ b/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/ZooKeeperProvider.java @@ -0,0 +1,10 @@ +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.clustercontroller.apps.clustercontroller; + +/** + * Abstraction we can depend on providing us with a zookeeper server being up. + * + * @author Ulf Lilleengen + */ +public interface ZooKeeperProvider { +} diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/clustercontroller/ClusterControllerContainer.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/clustercontroller/ClusterControllerContainer.java index b2aa1e6b704..14fbeb17aaf 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/admin/clustercontroller/ClusterControllerContainer.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/clustercontroller/ClusterControllerContainer.java @@ -54,11 +54,23 @@ public class ClusterControllerContainer extends Container implements "com.yahoo.vespa.clustercontroller.apps.clustercontroller.StateRestApiV2Handler", "/cluster/v2/*", CLUSTERCONTROLLER_BUNDLE); - addComponent("clustercontroller-zookeeper-server", - runStandaloneZooKeeper - ? "com.yahoo.vespa.zookeeper.VespaZooKeeperServerImpl" - : "com.yahoo.vespa.zookeeper.DummyVespaZooKeeperServer", - ZOOKEEPER_SERVER_BUNDLE); + if (runStandaloneZooKeeper) { + addComponent("clustercontroller-zkrunner", + "com.yahoo.vespa.zookeeper.VespaZooKeeperServerImpl", + ZOOKEEPER_SERVER_BUNDLE); + addComponent("clustercontroller-zkprovider", + "com.yahoo.vespa.clustercontroller.apps.clustercontroller.StandaloneZooKeeperProvider", + CLUSTERCONTROLLER_BUNDLE); + } else { + // TODO bjorncs/jonmv: remove extraneous ZooKeeperProvider layer + addComponent( + "clustercontroller-zkrunner", + "com.yahoo.vespa.zookeeper.DummyVespaZooKeeperServer", + ZOOKEEPER_SERVER_BUNDLE); + addComponent("clustercontroller-zkprovider", + "com.yahoo.vespa.clustercontroller.apps.clustercontroller.DummyZooKeeperProvider", + CLUSTERCONTROLLER_BUNDLE); + } addComponent(new AccessLogComponent(AccessLogComponent.AccessLogType.jsonAccessLog, "controller", isHosted)); // TODO: Why are bundles added here instead of in the cluster? @@ -84,7 +96,7 @@ public class ClusterControllerContainer extends Container implements return ContainerServiceType.CLUSTERCONTROLLER_CONTAINER; } - private void addHandler(Handler h, String path) { + private void addHandler(Handler h, String path) { h.addServerBindings(SystemBindingPattern.fromHttpPath(path)); super.addHandler(h); } @@ -104,7 +116,7 @@ public class ClusterControllerContainer extends Container implements } private void addHandler(String id, String className, String path, ComponentSpecification bundle) { - addHandler(new Handler<>(createComponentModel(id, className, bundle)), path); + addHandler(new Handler(createComponentModel(id, className, bundle)), path); } private ReindexingContext reindexingContext() { -- cgit v1.2.3