curator-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "John Vines (JIRA)" <j...@apache.org>
Subject [jira] [Created] (CURATOR-171) LeaderLatch isn't aware if it's own ephemeral node goes away
Date Tue, 09 Dec 2014 21:30:12 GMT
John Vines created CURATOR-171:
----------------------------------

             Summary: LeaderLatch isn't aware if it's own ephemeral node goes away
                 Key: CURATOR-171
                 URL: https://issues.apache.org/jira/browse/CURATOR-171
             Project: Apache Curator
          Issue Type: Bug
          Components: Recipes
            Reporter: John Vines


Running the following code- {code}  public static void main(String args[]) throws Exception
{
    CuratorFramework curator = CuratorFrameworkFactory.builder().connectString("localhost:2181").retryPolicy(new
ExponentialBackoffRetry(1000, 5))
        .authorization("digest", "accumulo:DEFAULT".getBytes()).build();
    curator.start();

    LeaderLatch latch = new LeaderLatch(curator, "/latch", "test");
    LeaderLatch latch2 = new LeaderLatch(curator, "/latch", "test2");
    latch.addListener(new LeaderLatchListener() {

      @Override
      public void isLeader() {
        System.out.println("Became leader!");
      }

      @Override
      public void notLeader() {
        System.out.println("Lost leadership!");
      }
    });
    latch.start();
    latch.await();
    latch2.start();
    Thread.sleep(1000);

    System.out.println("Does latch1 have leadership? " + latch.hasLeadership());
    System.out.println("Does latch2 have leadership? " + latch2.hasLeadership());
    for (String child : curator.getChildren().forPath("/latch"))
      if (Arrays.equals(curator.getData().forPath(ZKPaths.makePath("/latch", child)), "test".getBytes()))
          curator.delete().deletingChildrenIfNeeded().forPath(ZKPaths.makePath("/latch", child));

    Thread.sleep(1000);

    System.out.println("Does latch1 have leadership? " + latch.hasLeadership());
    System.out.println("Does latch2 have leadership? " + latch2.hasLeadership());
    
    Thread.sleep(1000 * 40);

    System.out.println("Does latch1 have leadership? " + latch.hasLeadership());
    System.out.println("Does latch2 have leadership? " + latch2.hasLeadership());
    
    latch.close();
    latch2.close();
    curator.close();
  }{code}

I get the following output-{noformat}Became leader!
Does latch1 have leadership? true
Does latch2 have leadership? false
Does latch1 have leadership? true
Does latch2 have leadership? true
Does latch1 have leadership? true
Does latch2 have leadership? true
{noformat}

I expect that when the ephemeral node is deleted, latch1 no longer reports itself as having
leadership. Furthermore, I expect it to trigger the notLeader call.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message