summaryrefslogtreecommitdiffstats
path: root/zookeeper-server/zookeeper-server-common/src/main/java
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2020-12-16 11:37:36 +0100
committerMartin Polden <mpolden@mpolden.no>2020-12-16 11:51:10 +0100
commit0245386a40ab33fa2c3891d2ba2c0f126244006f (patch)
treea7bb87c79adb5a33e18b62792bd4d1f95ba56a3b /zookeeper-server/zookeeper-server-common/src/main/java
parente5b1ddb28a720200aacb31de95e331068cf33c01 (diff)
Always force shutdown of non-reconfigurable ZooKeeper server
This basically reverts to the original behaviour, where the container is forced to exit when a new VespaZooKeeperServer component is setup.
Diffstat (limited to 'zookeeper-server/zookeeper-server-common/src/main/java')
-rw-r--r--zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/DummyVespaZooKeeperServer.java5
-rw-r--r--zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/VespaZooKeeperServer.java7
-rw-r--r--zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/ZooKeeperRunner.java21
3 files changed, 27 insertions, 6 deletions
diff --git a/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/DummyVespaZooKeeperServer.java b/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/DummyVespaZooKeeperServer.java
index ba53ea04b6e..c0b5b7c035f 100644
--- a/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/DummyVespaZooKeeperServer.java
+++ b/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/DummyVespaZooKeeperServer.java
@@ -21,4 +21,9 @@ public class DummyVespaZooKeeperServer extends AbstractComponent implements Vesp
@Override
public void start(Path configFilePath) {}
+ @Override
+ public boolean reconfigurable() {
+ return false;
+ }
+
}
diff --git a/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/VespaZooKeeperServer.java b/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/VespaZooKeeperServer.java
index ea8c6d2bbee..bb64fcc16ce 100644
--- a/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/VespaZooKeeperServer.java
+++ b/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/VespaZooKeeperServer.java
@@ -6,12 +6,17 @@ import java.nio.file.Path;
/**
* Interface for a component that starts/stops a ZooKeeper server.
*
- * @author Harald Musum
+ * @author hmusum
*/
public interface VespaZooKeeperServer {
+ /** Shut down the server. Blocks until shutdown has completed */
void shutdown();
+ /** Start the server with the given config file */
void start(Path configFilePath);
+ /** Whether this server support dynamic reconfiguration */
+ boolean reconfigurable();
+
}
diff --git a/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/ZooKeeperRunner.java b/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/ZooKeeperRunner.java
index bf2dd588c93..812c974f9f8 100644
--- a/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/ZooKeeperRunner.java
+++ b/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/ZooKeeperRunner.java
@@ -3,6 +3,7 @@ package com.yahoo.vespa.zookeeper;
import com.yahoo.cloud.config.ZookeeperServerConfig;
import com.yahoo.concurrent.DaemonThreadFactory;
+import com.yahoo.protect.Process;
import com.yahoo.security.tls.TransportSecurityUtils;
import java.nio.file.Path;
@@ -72,16 +73,26 @@ public class ZooKeeperRunner implements Runnable {
startServer(path); // Will block in a real implementation of VespaZooKeeperServer
return;
} catch (RuntimeException e) {
- Duration delay = backoff.delay(attempt);
- log.log(Level.WARNING, "Starting ZooKeeper server failed on attempt " + attempt +
- ". Retrying in " + delay + ", time left " + Duration.between(now, end), e);
- sleeper.sleep(delay);
+ String messagePart = "Starting " + serverDescription() + " failed on attempt " +
+ attempt;
+ if (server.reconfigurable()) {
+ Duration delay = backoff.delay(attempt);
+ log.log(Level.WARNING, messagePart + ". Retrying in " + delay + ", time left " +
+ Duration.between(now, end), e);
+ sleeper.sleep(delay);
+ } else {
+ Process.logAndDie(messagePart + ". Forcing shutdown", e);
+ }
} finally {
now = Instant.now();
}
}
}
+ private String serverDescription() {
+ return (server.reconfigurable() ? "" : "non-") + "reconfigurable ZooKeeper server";
+ }
+
private void startServer(Path path) {
// Note: Hack to make this work in ZooKeeper 3.6, where metrics provider class is
// loaded by using Thread.currentThread().getContextClassLoader() which does not work
@@ -91,7 +102,7 @@ public class ZooKeeperRunner implements Runnable {
try {
server.start(path);
} catch (Throwable e) {
- throw new RuntimeException("Starting ZooKeeper server failed", e);
+ throw new RuntimeException("Starting " + serverDescription() + " failed", e);
} finally {
Thread.currentThread().setContextClassLoader(tccl);
}