zookeeper-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Patrick Hunt <ph...@apache.org>
Subject Re: Embedding ZK in another application
Date Thu, 29 Apr 2010 15:49:49 GMT
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 zkServer.sh/zkServer.cmd 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?
> Thanks.
> On Thu, Apr 29, 2010 at 1:54 AM, Ted Dunning<ted.dunning@gmail.com>  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<vishalmlst@gmail.com>  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.

View raw message