summaryrefslogtreecommitdiffstats
path: root/zookeeper-server/zookeeper-server-3.6.2
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2020-12-15 11:05:35 +0100
committerMartin Polden <mpolden@mpolden.no>2020-12-15 11:23:14 +0100
commit1468a9df93196f38d8fc86d5d2be61650a94980f (patch)
treeaef1b0425009570e62afdf3f5076da0766b4d194 /zookeeper-server/zookeeper-server-3.6.2
parentb012824fe389d2a6cbfc054d42ce24d7ec76490b (diff)
Shut down ZooKeeper properly
Diffstat (limited to 'zookeeper-server/zookeeper-server-3.6.2')
-rw-r--r--zookeeper-server/zookeeper-server-3.6.2/src/main/java/com/yahoo/vespa/zookeeper/ReconfigurableVespaZooKeeperServer.java10
-rw-r--r--zookeeper-server/zookeeper-server-3.6.2/src/main/java/com/yahoo/vespa/zookeeper/VespaQuorumPeer.java53
-rw-r--r--zookeeper-server/zookeeper-server-3.6.2/src/main/java/com/yahoo/vespa/zookeeper/VespaZooKeeperServerImpl.java18
-rw-r--r--zookeeper-server/zookeeper-server-3.6.2/src/main/java/com/yahoo/vespa/zookeeper/ZooKeeperServer.java32
4 files changed, 74 insertions, 39 deletions
diff --git a/zookeeper-server/zookeeper-server-3.6.2/src/main/java/com/yahoo/vespa/zookeeper/ReconfigurableVespaZooKeeperServer.java b/zookeeper-server/zookeeper-server-3.6.2/src/main/java/com/yahoo/vespa/zookeeper/ReconfigurableVespaZooKeeperServer.java
index 027bb212f09..316bf389023 100644
--- a/zookeeper-server/zookeeper-server-3.6.2/src/main/java/com/yahoo/vespa/zookeeper/ReconfigurableVespaZooKeeperServer.java
+++ b/zookeeper-server/zookeeper-server-3.6.2/src/main/java/com/yahoo/vespa/zookeeper/ReconfigurableVespaZooKeeperServer.java
@@ -14,13 +14,21 @@ import java.nio.file.Path;
*/
public class ReconfigurableVespaZooKeeperServer extends AbstractComponent implements VespaZooKeeperServer {
+ private final VespaQuorumPeer peer;
+
@Inject
public ReconfigurableVespaZooKeeperServer(Reconfigurer reconfigurer, ZookeeperServerConfig zookeeperServerConfig) {
reconfigurer.startOrReconfigure(zookeeperServerConfig, this);
+ peer = new VespaQuorumPeer();
+ }
+
+ @Override
+ public void shutdown() {
+ peer.shutdown();
}
public void start(Path configFilePath) {
- new ZooKeeperServer().start(configFilePath);
+ peer.start(configFilePath);
}
}
diff --git a/zookeeper-server/zookeeper-server-3.6.2/src/main/java/com/yahoo/vespa/zookeeper/VespaQuorumPeer.java b/zookeeper-server/zookeeper-server-3.6.2/src/main/java/com/yahoo/vespa/zookeeper/VespaQuorumPeer.java
new file mode 100644
index 00000000000..61951391f89
--- /dev/null
+++ b/zookeeper-server/zookeeper-server-3.6.2/src/main/java/com/yahoo/vespa/zookeeper/VespaQuorumPeer.java
@@ -0,0 +1,53 @@
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.zookeeper;
+
+import org.apache.zookeeper.server.admin.AdminServer;
+import org.apache.zookeeper.server.quorum.QuorumPeerConfig;
+import org.apache.zookeeper.server.quorum.QuorumPeerMain;
+
+import java.io.IOException;
+import java.nio.file.Path;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * Starts/stops a ZooKeeper server. Extends QuorumPeerMain to be able to call initializeAndRun() and wraps
+ * exceptions so it can be used by code that does not depend on ZooKeeper.
+ *
+ * @author hmusum
+ */
+class VespaQuorumPeer extends QuorumPeerMain {
+
+ private static final Logger LOG = Logger.getLogger(VespaQuorumPeer.class.getName());
+
+ public void start(Path path) {
+ initializeAndRun(new String[]{ path.toFile().getAbsolutePath()});
+ }
+
+ public void shutdown() {
+ if (quorumPeer != null) {
+ try {
+ quorumPeer.shutdown();
+ } catch (RuntimeException e) {
+ // If shutdown fails, we have no other option than forcing the JVM to stop and letting it be restarted.
+ //
+ // When a VespaZooKeeperServer component receives a new config, the container will try to start a new
+ // server with the new config, this will fail until the old server is deconstructed. If the old server
+ // fails to deconstruct/shut down, the new one will never start and if that happens forcing a restart is
+ // the better option.
+ LOG.log(Level.SEVERE, "Failed to shut down properly, forcing restart", e);
+ System.exit(1);
+ }
+ }
+ }
+
+ @Override
+ protected void initializeAndRun(String[] args) {
+ try {
+ super.initializeAndRun(args);
+ } catch (QuorumPeerConfig.ConfigException | IOException | AdminServer.AdminServerException e) {
+ throw new RuntimeException("Exception when initializing or running ZooKeeper server", e);
+ }
+ }
+
+}
diff --git a/zookeeper-server/zookeeper-server-3.6.2/src/main/java/com/yahoo/vespa/zookeeper/VespaZooKeeperServerImpl.java b/zookeeper-server/zookeeper-server-3.6.2/src/main/java/com/yahoo/vespa/zookeeper/VespaZooKeeperServerImpl.java
index 4a9a5bb4f65..e93bae1e438 100644
--- a/zookeeper-server/zookeeper-server-3.6.2/src/main/java/com/yahoo/vespa/zookeeper/VespaZooKeeperServerImpl.java
+++ b/zookeeper-server/zookeeper-server-3.6.2/src/main/java/com/yahoo/vespa/zookeeper/VespaZooKeeperServerImpl.java
@@ -8,28 +8,34 @@ import com.yahoo.component.AbstractComponent;
import java.nio.file.Path;
/**
- * Main component controlling startup and stop of zookeeper server
- *
* @author Ulf Lilleengen
* @author Harald Musum
*/
public class VespaZooKeeperServerImpl extends AbstractComponent implements VespaZooKeeperServer {
- private final ZooKeeperRunner zooKeeperRunner;
+ private final VespaQuorumPeer peer;
+ private final ZooKeeperRunner runner;
@Inject
public VespaZooKeeperServerImpl(ZookeeperServerConfig zookeeperServerConfig) {
- this.zooKeeperRunner = new ZooKeeperRunner(zookeeperServerConfig, this);
+ this.peer = new VespaQuorumPeer();
+ this.runner = new ZooKeeperRunner(zookeeperServerConfig, this);
}
@Override
public void deconstruct() {
- zooKeeperRunner.shutdown();
+ runner.shutdown();
super.deconstruct();
}
+ @Override
+ public void shutdown() {
+ peer.shutdown();
+ }
+
+ @Override
public void start(Path configFilePath) {
- new ZooKeeperServer().start(configFilePath);
+ peer.start(configFilePath);
}
}
diff --git a/zookeeper-server/zookeeper-server-3.6.2/src/main/java/com/yahoo/vespa/zookeeper/ZooKeeperServer.java b/zookeeper-server/zookeeper-server-3.6.2/src/main/java/com/yahoo/vespa/zookeeper/ZooKeeperServer.java
deleted file mode 100644
index ceb036049da..00000000000
--- a/zookeeper-server/zookeeper-server-3.6.2/src/main/java/com/yahoo/vespa/zookeeper/ZooKeeperServer.java
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.zookeeper;
-
-import org.apache.zookeeper.server.admin.AdminServer;
-import org.apache.zookeeper.server.quorum.QuorumPeerConfig;
-import org.apache.zookeeper.server.quorum.QuorumPeerMain;
-
-import java.io.IOException;
-import java.nio.file.Path;
-
-/**
- * Class to start zookeeper server. Extends QuorumPeerMain to be able to call initializeAndRun() and wraps
- * exceptions so it can be used by code that does not depend on zookeeper.
- *
- * @author hmusum
- */
-class ZooKeeperServer extends QuorumPeerMain {
-
- public void start(Path path) {
- initializeAndRun(new String[]{ path.toFile().getAbsolutePath()});
- }
-
- @Override
- protected void initializeAndRun(String[] args) {
- try {
- super.initializeAndRun(args);
- } catch (QuorumPeerConfig.ConfigException | IOException | AdminServer.AdminServerException e) {
- throw new RuntimeException("Exception when initializing or running ZooKeeper server", e);
- }
- }
-
-}