See the quorum tests for examples of how to do this, in particular take a look at org.apache.zookeeper.test.QuorumBase which is how we start/stop quorum servers in some of our tests. Our tests can run in "fork once" mode in junit. Meaning that all the tests (starting/stopping servers frequently) run in the same jvm, your embedded case.

This is not foolproof however. We found that in general this would work, however there were some infrequent cases where a restarted server would fail to initialize due to the following issue: "it is possible for the process to complete before the kernel has released the associated network resource, and this port cannot be bound to another process until the kernel has decided that it is done."

more detail here:

as a result we ended up changing the test code to start each test with new quorum/election port numbers. This fixed the problem for us but would not be a solution in your case.


On 04/29/2010 07:13 AM, Vishal K wrote:
Hi Ted,

We want the application that embeds the ZK server to be running even after
the ZK server is shutdown. So we don't want to restart the application.
Also, we prefer not to use because these are OS
dependent (our application will run on Win as well as Linux). Instead, we
thought that calling QuorumPeerMain.initializeAndRun() and
QuorumPeerMain.shutdown() will suffice to start and shutdown a ZK server and
we won't have to worry about checking the OS.

Is there way to cleanly shutdown the ZK server (by invoking ZK server API)
when it is embedded in the application without actually restarting the
application process?
On Thu, Apr 29, 2010 at 1:54 AM, Ted Dunning<>  wrote:

Hmmm.... it isn't quite clear what you mean by restart without restarting.

Why is killing the server and restarting it not an option?

It is common to do a rolling restart on a ZK cluster.  Just restart one
server at a time.  This is often used during system upgrades.

On Wed, Apr 28, 2010 at 8:22 PM, Vishal K<>  wrote:

What is a good way to restart a ZK server (standalone and quorum) without
having to restart it?

Currently, I have ZK server embedded in another java application.

Reply via email to