aboutsummaryrefslogtreecommitdiffstats
path: root/config-model/src/main
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2020-11-25 11:18:56 +0100
committerMartin Polden <mpolden@mpolden.no>2020-11-25 11:18:56 +0100
commit3c20a4031452f23293aa26e1f1b4f22652379db1 (patch)
tree194a37ef8e1fe8eb44ed53873c9dcfd69cbb7a71 /config-model/src/main
parenta251e3bc94386f8f2b958081bcb3dcb9f1bc634b (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.java25
-rw-r--r--config-model/src/main/resources/schema/containercluster.rnc5
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
}