curator-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Check Peck <>
Subject Zookeeper Leadership election with curator
Date Thu, 15 Jan 2015 22:24:39 GMT
I am using Zookeeper for the leadership election process. I have three
nodes zookeeper ensemble.

We have a node like this "/test/msn" on which we are doing the leadership
election and it works fine and we have application servers running it in
production and using "/test/msn" node for leadership. And this program is
always running.

Now we created another node like this "/testpnl" in the same zookeeper
servers. And we have another set of machines which is trying to do the
leadership election on that node and whenever I run my program in
production from one servers, it always returns back that the node is not
leader? And I can see only one node inside "/testpnl" and it is the same
node from which I am running my program?

I am using Curator 2.7.0 and the zookeeper version is 3.4.5 Is there
anything wrong with my setup or zookeeper has some bug which I am not aware?

Is anything

    public class ZookeeperLeaderTester {

        private ZookeeperClient zookClient;

        private static final String ZOOK_PRODUCTION =
        private static final String LEADERSHIP_NODE = "/testpnl";

        private static class Holder {
            static final ZookeeperLeaderTester INSTANCE = new

        public static ZookeeperLeaderTester getInstance() {
            return Holder.INSTANCE;

        private ZookeeperLeaderTester() {
            try {
                String hostname = getHostName();

                zookClient = new ZookeeperClient(nodes, LEADERSHIP_NODE,

            } catch (Exception ex) {
                System.out.println (ex);

        public ZookeeperClient getZookClient() {
            return zookClient;

And here is my ZookeeperClient code -

    public class ZookeeperClient {

        private CuratorFramework client;
        private String latchPath;
        private String id;
        private LeaderLatch leaderLatch;

        public ZookeeperClient(String connString, String latchPath, String
id) {
            client = CuratorFrameworkFactory.newClient(connString, new
ExponentialBackoffRetry(1000, Integer.MAX_VALUE));
   = id;
            this.latchPath = latchPath;

        public void start() throws Exception {
            leaderLatch = new LeaderLatch(client, latchPath, id);

        public boolean isLeader() {
            return leaderLatch.hasLeadership();

        public Participant currentLeader() throws Exception {
            return leaderLatch.getLeader();

        public void close() throws IOException {

        public CuratorFramework getClient() {
            return client;

        public String getLatchPath() {
            return latchPath;

        public String getId() {
            return id;

        public LeaderLatch getLeaderLatch() {
            return leaderLatch;

And this is the way I am using it -

    ZookeeperLeaderTester zookClient =
    if (zookClient.isLeader()) {
        // then do stuff

View raw message