diff options
author | Harald Musum <musum@yahoo-inc.com> | 2017-06-22 12:02:21 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-06-22 12:02:21 +0200 |
commit | d50b9301b111b63a9eebebe432d9941475f97af3 (patch) | |
tree | bb40d499891e49d7870a1c0936272001b8c289e3 | |
parent | c580efeffd7dbe408500bde71bae9c078b03e6f2 (diff) |
Revert "Revert "Shutdown zookeeper properly""
-rw-r--r-- | zkfacade/src/main/java/com/yahoo/vespa/zookeeper/ZooKeeperServer.java | 56 |
1 files changed, 38 insertions, 18 deletions
diff --git a/zkfacade/src/main/java/com/yahoo/vespa/zookeeper/ZooKeeperServer.java b/zkfacade/src/main/java/com/yahoo/vespa/zookeeper/ZooKeeperServer.java index 76666d8e71e..25779e7b391 100644 --- a/zkfacade/src/main/java/com/yahoo/vespa/zookeeper/ZooKeeperServer.java +++ b/zkfacade/src/main/java/com/yahoo/vespa/zookeeper/ZooKeeperServer.java @@ -6,13 +6,15 @@ import com.google.inject.Inject; import com.yahoo.cloud.config.ZookeeperServerConfig; import com.yahoo.component.AbstractComponent; import com.yahoo.log.LogLevel; +import org.apache.zookeeper.server.quorum.QuorumPeerConfig; +import org.apache.zookeeper.server.quorum.QuorumPeerMain; + import static com.yahoo.vespa.defaults.Defaults.getDefaults; import java.io.FileWriter; import java.io.IOException; import java.util.Collection; import java.util.List; -import java.util.Optional; /** * Writes zookeeper config and starts zookeeper server. @@ -20,7 +22,7 @@ import java.util.Optional; * @author lulf * @since 5.3 */ -public class ZooKeeperServer extends AbstractComponent implements Runnable { +public class ZooKeeperServer extends AbstractComponent{ /** * The set of hosts which can access the ZooKeeper server in this VM, or empty @@ -33,7 +35,8 @@ public class ZooKeeperServer extends AbstractComponent implements Runnable { private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(ZooKeeperServer.class.getName()); private static final String ZOOKEEPER_JMX_LOG4J_DISABLE = "zookeeper.jmx.log4j.disable"; static final String ZOOKEEPER_JUTE_MAX_BUFFER = "jute.maxbuffer"; - private final Thread zkServerThread; + + private final ZooKeeperMain zooKeeperMain; private final ZookeeperServerConfig config; ZooKeeperServer(ZookeeperServerConfig config, boolean startServer) { @@ -43,7 +46,9 @@ public class ZooKeeperServer extends AbstractComponent implements Runnable { System.setProperty("zookeeper.serverCnxnFactory", "com.yahoo.vespa.zookeeper.RestrictedServerCnxnFactory"); writeConfigToDisk(config); - zkServerThread = new Thread(this, "zookeeper server"); + this.zooKeeperMain = new ZooKeeperMain(config); + Thread zkServerThread = new Thread(zooKeeperMain, "zookeeper server"); + zkServerThread.setDaemon(true); if (startServer) { zkServerThread.start(); } @@ -118,20 +123,7 @@ public class ZooKeeperServer extends AbstractComponent implements Runnable { } private void shutdown() { - zkServerThread.interrupt(); - try { - zkServerThread.join(); - } catch (InterruptedException e) { - log.log(LogLevel.WARNING, "Error joining server thread on shutdown", e); - } - } - - @Override - public void run() { - System.setProperty(ZOOKEEPER_JMX_LOG4J_DISABLE, "true"); - String[] args = new String[]{getDefaults().underVespaHome(config.zooKeeperConfigFile())}; - log.log(LogLevel.DEBUG, "Starting ZooKeeper server with config: " + args[0]); - org.apache.zookeeper.server.quorum.QuorumPeerMain.main(args); + zooKeeperMain.shutdown(); } @Override @@ -142,4 +134,32 @@ public class ZooKeeperServer extends AbstractComponent implements Runnable { public ZookeeperServerConfig getConfig() { return config; } + /** Takes care of starting and stopping the zookeeper server properly */ + private static class ZooKeeperMain extends QuorumPeerMain implements Runnable { + private final ZookeeperServerConfig config; + + public ZooKeeperMain(ZookeeperServerConfig config) { + super(); + this.config = config; + } + + @Override + public void run() { + System.setProperty(ZOOKEEPER_JMX_LOG4J_DISABLE, "true"); + String[] args = new String[]{getDefaults().underVespaHome(config.zooKeeperConfigFile())}; + log.log(LogLevel.DEBUG, "Starting ZooKeeper server with config: " + args[0]); + try { + initializeAndRun(args); + } catch (QuorumPeerConfig.ConfigException e) { + throw new RuntimeException("Bad config: ", e); + } catch (IOException e) { + throw new RuntimeException("IO exception: ", e); + } + } + + public void shutdown() { + quorumPeer.shutdown(); + } + } + } |