summaryrefslogtreecommitdiffstats
path: root/zkfacade/src/main/java/com/yahoo
diff options
context:
space:
mode:
authorjonmv <venstad@gmail.com>2022-10-14 13:47:46 +0200
committerjonmv <venstad@gmail.com>2022-10-14 13:47:46 +0200
commit240a1334cb36080f38c14ac42099513529bb50ad (patch)
tree6fc7c2755f14054db00371a4a9297b47ea9e55b2 /zkfacade/src/main/java/com/yahoo
parent6e7459c9eff635d9c8227cd8d1add320f298c0e2 (diff)
12s session timeout for application cluster curator
Diffstat (limited to 'zkfacade/src/main/java/com/yahoo')
-rw-r--r--zkfacade/src/main/java/com/yahoo/vespa/curator/Curator.java31
-rw-r--r--zkfacade/src/main/java/com/yahoo/vespa/curator/SingletonManager.java2
2 files changed, 22 insertions, 11 deletions
diff --git a/zkfacade/src/main/java/com/yahoo/vespa/curator/Curator.java b/zkfacade/src/main/java/com/yahoo/vespa/curator/Curator.java
index 1da51beef29..ab35ccf545e 100644
--- a/zkfacade/src/main/java/com/yahoo/vespa/curator/Curator.java
+++ b/zkfacade/src/main/java/com/yahoo/vespa/curator/Curator.java
@@ -63,8 +63,8 @@ public class Curator extends AbstractComponent implements AutoCloseable {
private static final Logger LOG = Logger.getLogger(Curator.class.getName());
private static final File ZK_CLIENT_CONFIG_FILE = new File(Defaults.getDefaults().underVespaHome("conf/zookeeper/zookeeper-client.cfg"));
- // Note that session timeout has min and max values are related to tickTime defined by server, see configserver.def
- static final Duration ZK_SESSION_TIMEOUT = Duration.ofSeconds(120);
+ // Note that session timeout has min and max values are related to tickTime defined by server, see zookeeper-server.def
+ static final Duration DEFAULT_ZK_SESSION_TIMEOUT = Duration.ofSeconds(120);
private static final Duration ZK_CONNECTION_TIMEOUT = Duration.ofSeconds(30);
private static final Duration BASE_SLEEP_TIME = Duration.ofSeconds(1);
@@ -76,18 +76,21 @@ public class Curator extends AbstractComponent implements AutoCloseable {
private final CuratorFramework curatorFramework;
private final ConnectionSpec connectionSpec;
private final long juteMaxBuffer;
+ private final Duration sessionTimeout;
// All lock keys, to allow re-entrancy. This will grow forever, but this should be too slow to be a problem
private final ConcurrentHashMap<Path, Lock> locks = new ConcurrentHashMap<>();
/** Creates a curator instance from a comma-separated string of ZooKeeper host:port strings */
public static Curator create(String connectionSpec) {
- return new Curator(ConnectionSpec.create(connectionSpec), Optional.of(ZK_CLIENT_CONFIG_FILE), defaultJuteMaxBuffer);
+ return new Curator(ConnectionSpec.create(connectionSpec), Optional.of(ZK_CLIENT_CONFIG_FILE),
+ defaultJuteMaxBuffer, DEFAULT_ZK_SESSION_TIMEOUT);
}
// For testing only, use Optional.empty for clientConfigFile parameter to create default zookeeper client config
public static Curator create(String connectionSpec, Optional<File> clientConfigFile) {
- return new Curator(ConnectionSpec.create(connectionSpec), clientConfigFile, defaultJuteMaxBuffer);
+ return new Curator(ConnectionSpec.create(connectionSpec), clientConfigFile,
+ defaultJuteMaxBuffer, DEFAULT_ZK_SESSION_TIMEOUT);
}
@Inject
@@ -98,31 +101,35 @@ public class Curator extends AbstractComponent implements AutoCloseable {
CuratorConfig.Server::port,
curatorConfig.zookeeperLocalhostAffinity()),
Optional.of(ZK_CLIENT_CONFIG_FILE),
- defaultJuteMaxBuffer);
+ defaultJuteMaxBuffer,
+ Duration.ofSeconds(curatorConfig.zookeeperSessionTimeoutSeconds()));
}
protected Curator(String connectionSpec, String zooKeeperEnsembleConnectionSpec, Function<RetryPolicy, CuratorFramework> curatorFactory) {
- this(ConnectionSpec.create(connectionSpec, zooKeeperEnsembleConnectionSpec), curatorFactory.apply(DEFAULT_RETRY_POLICY), defaultJuteMaxBuffer);
+ this(ConnectionSpec.create(connectionSpec, zooKeeperEnsembleConnectionSpec), curatorFactory.apply(DEFAULT_RETRY_POLICY),
+ defaultJuteMaxBuffer, DEFAULT_ZK_SESSION_TIMEOUT);
}
- Curator(ConnectionSpec connectionSpec, Optional<File> clientConfigFile, long juteMaxBuffer) {
+ Curator(ConnectionSpec connectionSpec, Optional<File> clientConfigFile, long juteMaxBuffer, Duration sessionTimeout) {
this(connectionSpec,
CuratorFrameworkFactory
.builder()
.retryPolicy(DEFAULT_RETRY_POLICY)
- .sessionTimeoutMs((int) ZK_SESSION_TIMEOUT.toMillis())
+ .sessionTimeoutMs((int) sessionTimeout.toMillis())
.connectionTimeoutMs((int) ZK_CONNECTION_TIMEOUT.toMillis())
.connectString(connectionSpec.local())
.zookeeperFactory(new VespaZooKeeperFactory(createClientConfig(clientConfigFile)))
.dontUseContainerParents() // TODO: Consider changing this in Vespa 9
.build(),
- juteMaxBuffer);
+ juteMaxBuffer,
+ sessionTimeout);
}
- private Curator(ConnectionSpec connectionSpec, CuratorFramework curatorFramework, long juteMaxBuffer) {
+ private Curator(ConnectionSpec connectionSpec, CuratorFramework curatorFramework, long juteMaxBuffer, Duration sessionTimeout) {
this.connectionSpec = Objects.requireNonNull(connectionSpec);
this.curatorFramework = Objects.requireNonNull(curatorFramework);
this.juteMaxBuffer = juteMaxBuffer;
+ this.sessionTimeout = sessionTimeout;
addLoggingListener();
curatorFramework.start();
}
@@ -141,6 +148,10 @@ public class Curator extends AbstractComponent implements AutoCloseable {
}
}
+ public Duration sessionTimeout() {
+ return sessionTimeout;
+ }
+
/** For internal use; prefer creating a {@link CuratorCounter} */
public DistributedAtomicLong createAtomicCounter(String path) {
return new DistributedAtomicLong(curatorFramework, path, new ExponentialBackoffRetry((int) BASE_SLEEP_TIME.toMillis(), MAX_RETRIES));
diff --git a/zkfacade/src/main/java/com/yahoo/vespa/curator/SingletonManager.java b/zkfacade/src/main/java/com/yahoo/vespa/curator/SingletonManager.java
index e54197c39fd..2658bcce686 100644
--- a/zkfacade/src/main/java/com/yahoo/vespa/curator/SingletonManager.java
+++ b/zkfacade/src/main/java/com/yahoo/vespa/curator/SingletonManager.java
@@ -293,7 +293,7 @@ class SingletonManager {
logger.log(FINE, "Failed pinging ZK cluster", e);
return;
}
- if ( ! doom.compareAndSet(ourDoom, start.plus(Curator.ZK_SESSION_TIMEOUT.multipliedBy(9).dividedBy(10)))) {
+ if ( ! doom.compareAndSet(ourDoom, start.plus(curator.sessionTimeout().multipliedBy(9).dividedBy(10)))) {
logger.log(FINE, "Deadline changed, current lease renewal is void");
}
}