diff --git a/zookeeper-server/src/main/java/org/apache/zookeeper/server/ZooKeeperServer.java b/zookeeper-server/src/main/java/org/apache/zookeeper/server/ZooKeeperServer.java index f460b2d5bb4..43d06816661 100644 --- a/zookeeper-server/src/main/java/org/apache/zookeeper/server/ZooKeeperServer.java +++ b/zookeeper-server/src/main/java/org/apache/zookeeper/server/ZooKeeperServer.java @@ -933,12 +933,23 @@ public void shutdown() { * @param fullyShutDown true if another server using the same database will not replace this one in the same process */ public synchronized void shutdown(boolean fullyShutDown) { + if (shutdownZKServer(fullyShutDown)) { + updateZKDatabase(fullyShutDown); + } + } + + /** + * Shut down the server instance + * @param fullyShutDown true if another server using the same database will not replace this one in the same process + * @return true if the server is successfully shutdown, false if the server cannot be shutdown. + */ + protected synchronized boolean shutdownZKServer(boolean fullyShutDown) { if (!canShutdown()) { if (fullyShutDown && zkDb != null) { zkDb.clear(); } LOG.debug("ZooKeeper server is not running, so not proceeding to shutdown!"); - return; + return false; } LOG.info("shutting down"); @@ -965,7 +976,16 @@ public synchronized void shutdown(boolean fullyShutDown) { if (jvmPauseMonitor != null) { jvmPauseMonitor.serviceStop(); } + requestPathMetricsCollector.shutdown(); + unregisterJMX(); + return true; + } + /** + * Update zk database during shutdown + * @param fullyShutDown true if another server using the same database will not replace this one in the same process + */ + protected synchronized void updateZKDatabase(boolean fullyShutDown) { if (zkDb != null) { if (fullyShutDown) { zkDb.clear(); @@ -984,9 +1004,6 @@ public synchronized void shutdown(boolean fullyShutDown) { } } } - - requestPathMetricsCollector.shutdown(); - unregisterJMX(); } protected void unregisterJMX() { diff --git a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/LearnerZooKeeperServer.java b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/LearnerZooKeeperServer.java index efd2e376208..440a1917f95 100644 --- a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/LearnerZooKeeperServer.java +++ b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/LearnerZooKeeperServer.java @@ -172,4 +172,18 @@ public synchronized void shutdown() { } } + @Override + public void shutdown(boolean fullyShutDown) { + if (shutdownZKServer(fullyShutDown)) { + try { + if (syncProcessor != null) { + syncProcessor.shutdown(); + } + } catch (Exception e) { + LOG.warn("Ignoring unexpected exception in syncprocessor shutdown", e); + } + updateZKDatabase(fullyShutDown); + } + } + }