diff options
author | Martin Polden <mpolden@mpolden.no> | 2020-11-25 11:18:56 +0100 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2020-11-25 11:18:56 +0100 |
commit | 3c20a4031452f23293aa26e1f1b4f22652379db1 (patch) | |
tree | 194a37ef8e1fe8eb44ed53873c9dcfd69cbb7a71 /config-model/src/main | |
parent | a251e3bc94386f8f2b958081bcb3dcb9f1bc634b (diff) |
Support configuring ZooKeeper service in container
Diffstat (limited to 'config-model/src/main')
-rw-r--r-- | config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java | 25 | ||||
-rw-r--r-- | config-model/src/main/resources/schema/containercluster.rnc | 5 |
2 files changed, 29 insertions, 1 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java index b95571de936..b7d64483e57 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java @@ -112,6 +112,10 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { private static final String DEPRECATED_CONTAINER_TAG = "jdisc"; private static final String ENVIRONMENT_VARIABLES_ELEMENT = "environment-variables"; + // The node count to enforce in a cluster running ZooKeeper + private static final int MIN_ZOOKEEPER_NODE_COUNT = 3; + private static final int MAX_ZOOKEEPER_NODE_COUNT = 7; + public enum Networking { disable, enable } private ApplicationPackage app; @@ -195,7 +199,26 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { addClientProviders(deployState, spec, cluster); addServerProviders(deployState, spec, cluster); - addAthensCopperArgos(cluster, context); // Must be added after nodes. + // Must be added after nodes: + addAthensCopperArgos(cluster, context); + addZooKeeper(cluster, spec); + } + + private void addZooKeeper(ApplicationContainerCluster cluster, Element spec) { + Element zkElement = XML.getChild(spec, "zookeeper"); + if (zkElement == null) return; + Element nodesElement = XML.getChild(spec, "nodes"); + boolean isCombined = nodesElement != null && nodesElement.hasAttribute("of"); + if (isCombined) { + throw new IllegalArgumentException("A combined cluster cannot run ZooKeeper"); + } + int nodeCount = cluster.getContainers().size(); + if (nodeCount < MIN_ZOOKEEPER_NODE_COUNT || nodeCount > MAX_ZOOKEEPER_NODE_COUNT || nodeCount % 2 == 0) { + throw new IllegalArgumentException("Clusters running ZooKeeper must have an odd number of nodes, between " + + MIN_ZOOKEEPER_NODE_COUNT + " and " + MAX_ZOOKEEPER_NODE_COUNT); + } + cluster.addSimpleComponent("com.yahoo.vespa.curator.Curator", null, "zkfacade"); + // TODO: Add server component } private void addSecretStore(ApplicationContainerCluster cluster, Element spec) { diff --git a/config-model/src/main/resources/schema/containercluster.rnc b/config-model/src/main/resources/schema/containercluster.rnc index 25d10e0d9b3..ca7efd5a938 100644 --- a/config-model/src/main/resources/schema/containercluster.rnc +++ b/config-model/src/main/resources/schema/containercluster.rnc @@ -27,6 +27,7 @@ ContainerServices = Http? & AccessLog* & SecretStore? & + ZooKeeper? & GenericConfig* # TODO(ogronnesby): Change this configuration syntax @@ -91,6 +92,10 @@ SecretStore = element secret-store { } + } +ZooKeeper = element zookeeper { + empty +} + ModelEvaluation = element model-evaluation { empty } |