summaryrefslogtreecommitdiffstats
path: root/config-model/src
diff options
context:
space:
mode:
authorjonmv <venstad@gmail.com>2022-10-14 14:19:16 +0200
committerjonmv <venstad@gmail.com>2022-11-10 09:43:18 +0100
commitcd91326cd9766bd4f0241c9762cd7adc852a94f0 (patch)
treebcfdfd231b99b700a282d2ce42f3d6b2aceb6548 /config-model/src
parentb26cbb29aec75b76767e6e1631eae2a11f035823 (diff)
Configurable through session-timeout-seconds attribute
Diffstat (limited to 'config-model/src')
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/ApplicationContainerCluster.java9
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java21
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilderTest.java4
3 files changed, 27 insertions, 7 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/ApplicationContainerCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/container/ApplicationContainerCluster.java
index 5703de4cb18..edd74a12868 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/container/ApplicationContainerCluster.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/container/ApplicationContainerCluster.java
@@ -89,6 +89,7 @@ public final class ApplicationContainerCluster extends ContainerCluster<Applicat
private MbusParams mbusParams;
private boolean messageBusEnabled = true;
+ private int zookeeperSessionTimeoutSeconds = -1;
private final int transport_events_before_wakeup;
private final int transport_connections_per_target;
private final int heapSizePercentageOfTotalNodeMemory;
@@ -315,8 +316,8 @@ public final class ApplicationContainerCluster extends ContainerCluster<Applicat
if (getParent() instanceof ConfigserverCluster) return; // Produces its own config
super.getConfig(builder);
- // 12s is 2x the current ZookeeperServerConfig.tickTime() of 6s, and the default minimum the server will accept.
- builder.zookeeperSessionTimeoutSeconds(12); // TODO jonmv: make configurable
+ // Will be forced between 2x and 20x of ZookeeperServerConfig.tickTime(), which is currently 6s.
+ builder.zookeeperSessionTimeoutSeconds(zookeeperSessionTimeoutSeconds);
}
public Optional<String> getTlsClientAuthority() {
@@ -329,6 +330,10 @@ public final class ApplicationContainerCluster extends ContainerCluster<Applicat
public void setMessageBusEnabled(boolean messageBusEnabled) { this.messageBusEnabled = messageBusEnabled; }
+ public void setZookeeperSessionTimeoutSeconds(int timeoutSeconds) {
+ this.zookeeperSessionTimeoutSeconds = timeoutSeconds;
+ }
+
protected boolean messageBusEnabled() { return messageBusEnabled; }
public void addMbusServer(ComponentId chainId) {
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 6fbe334ba30..0219f8a5275 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
@@ -233,7 +233,9 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> {
}
private void addZooKeeper(ApplicationContainerCluster cluster, Element spec) {
- if ( ! hasZooKeeper(spec)) return;
+ Element zooKeeper = getZooKeeper(spec);
+ if (zooKeeper == null) return;
+
Element nodesElement = XML.getChild(spec, "nodes");
boolean isCombined = nodesElement != null && nodesElement.hasAttribute("of");
if (isCombined) {
@@ -247,6 +249,17 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> {
}
cluster.addSimpleComponent("com.yahoo.vespa.curator.Curator", null, "zkfacade");
cluster.addSimpleComponent("com.yahoo.vespa.curator.CuratorWrapper", null, "zkfacade");
+ String sessionTimeoutSeconds = zooKeeper.getAttribute("session-timeout-seconds");
+ if ( ! sessionTimeoutSeconds.isBlank()) {
+ try {
+ int timeoutSeconds = Integer.parseInt(sessionTimeoutSeconds);
+ if (timeoutSeconds <= 0) throw new IllegalArgumentException("must be a positive value");
+ cluster.setZookeeperSessionTimeoutSeconds(timeoutSeconds);
+ }
+ catch (RuntimeException e) {
+ throw new IllegalArgumentException("invalid zookeeper session-timeout-seconds '" + sessionTimeoutSeconds + "'", e);
+ }
+ }
// These need to be setup so that they will use the container's config id, since each container
// have different config (id of zookeeper server)
@@ -806,7 +819,7 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> {
ClusterSpec.Type.container,
ClusterSpec.Id.from(cluster.getName()),
log,
- hasZooKeeper(containerElement));
+ getZooKeeper(containerElement) != null);
return createNodesFromHosts(hosts, cluster, context.getDeployState());
}
@@ -1036,8 +1049,8 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> {
));
}
- private static boolean hasZooKeeper(Element spec) {
- return XML.getChild(spec, "zookeeper") != null;
+ private static Element getZooKeeper(Element spec) {
+ return XML.getChild(spec, "zookeeper");
}
/** Disallow renderers named "XmlRenderer" or "JsonRenderer" */
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilderTest.java b/config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilderTest.java
index 562b1c25b6c..e172e68c0ee 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilderTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilderTest.java
@@ -1,6 +1,7 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.model.container.xml;
+import com.yahoo.cloud.config.CuratorConfig;
import com.yahoo.cloud.config.ZookeeperServerConfig;
import com.yahoo.component.ComponentId;
import com.yahoo.config.application.api.ApplicationPackage;
@@ -561,7 +562,7 @@ public class ContainerModelBuilderTest extends ContainerModelBuilderTestBase {
void cluster_with_zookeeper() {
Function<Integer, String> servicesXml = (nodeCount) -> "<container version='1.0' id='default'>" +
"<nodes count='" + nodeCount + "'/>" +
- "<zookeeper/>" +
+ "<zookeeper session-timeout-seconds='30'/>" +
"</container>";
VespaModelTester tester = new VespaModelTester();
tester.addHosts(3);
@@ -571,6 +572,7 @@ public class ContainerModelBuilderTest extends ContainerModelBuilderTestBase {
assertNotNull(cluster);
assertComponentConfigured(cluster, "com.yahoo.vespa.curator.Curator");
assertComponentConfigured(cluster, "com.yahoo.vespa.curator.CuratorWrapper");
+ assertEquals(30, model.getConfig(CuratorConfig.class, cluster.getConfigId()).zookeeperSessionTimeoutSeconds());
cluster.getContainers().forEach(container -> {
assertComponentConfigured(container, "com.yahoo.vespa.zookeeper.ReconfigurableVespaZooKeeperServer");
assertComponentConfigured(container, "com.yahoo.vespa.zookeeper.Reconfigurer");