Search in sources :

Example 21 with CuratorListener

use of org.apache.curator.framework.api.CuratorListener in project druid by druid-io.

the class AnnouncerTest method testSessionKilled.

@Test(timeout = 60_000L)
public void testSessionKilled() throws Exception {
    curator.start();
    curator.blockUntilConnected();
    Announcer announcer = new Announcer(curator, exec);
    try {
        curator.inTransaction().create().forPath("/somewhere").and().commit();
        announcer.start();
        final byte[] billy = StringUtils.toUtf8("billy");
        final String testPath1 = "/test1";
        final String testPath2 = "/somewhere/test2";
        final Set<String> paths = Sets.newHashSet(testPath1, testPath2);
        announcer.announce(testPath1, billy);
        announcer.announce(testPath2, billy);
        Assert.assertArrayEquals(billy, curator.getData().decompressed().forPath(testPath1));
        Assert.assertArrayEquals(billy, curator.getData().decompressed().forPath(testPath2));
        final CountDownLatch latch = new CountDownLatch(1);
        curator.getCuratorListenable().addListener(new CuratorListener() {

            @Override
            public void eventReceived(CuratorFramework client, CuratorEvent event) {
                if (event.getType() == CuratorEventType.CREATE) {
                    paths.remove(event.getPath());
                    if (paths.isEmpty()) {
                        latch.countDown();
                    }
                }
            }
        });
        KillSession.kill(curator.getZookeeperClient().getZooKeeper(), server.getConnectString());
        Assert.assertTrue(timing.forWaiting().awaitLatch(latch));
        Assert.assertArrayEquals(billy, curator.getData().decompressed().forPath(testPath1));
        Assert.assertArrayEquals(billy, curator.getData().decompressed().forPath(testPath2));
        announcer.stop();
        while ((curator.checkExists().forPath(testPath1) != null) || (curator.checkExists().forPath(testPath2) != null)) {
            Thread.sleep(100);
        }
        Assert.assertNull(curator.checkExists().forPath(testPath1));
        Assert.assertNull(curator.checkExists().forPath(testPath2));
    } finally {
        announcer.stop();
    }
}
Also used : CuratorFramework(org.apache.curator.framework.CuratorFramework) CuratorListener(org.apache.curator.framework.api.CuratorListener) CuratorEvent(org.apache.curator.framework.api.CuratorEvent) CountDownLatch(java.util.concurrent.CountDownLatch) Test(org.junit.Test)

Example 22 with CuratorListener

use of org.apache.curator.framework.api.CuratorListener in project druid by druid-io.

the class AnnouncerTest method awaitAnnounce.

private void awaitAnnounce(final Announcer announcer, final String path, final byte[] bytes, boolean removeParentsIfCreated) throws InterruptedException {
    final CountDownLatch latch = new CountDownLatch(1);
    curator.getCuratorListenable().addListener(new CuratorListener() {

        @Override
        public void eventReceived(CuratorFramework client, CuratorEvent event) {
            if (event.getType() == CuratorEventType.CREATE && event.getPath().equals(path)) {
                latch.countDown();
            }
        }
    });
    announcer.announce(path, bytes, removeParentsIfCreated);
    latch.await();
}
Also used : CuratorFramework(org.apache.curator.framework.CuratorFramework) CuratorListener(org.apache.curator.framework.api.CuratorListener) CuratorEvent(org.apache.curator.framework.api.CuratorEvent) CountDownLatch(java.util.concurrent.CountDownLatch)

Example 23 with CuratorListener

use of org.apache.curator.framework.api.CuratorListener in project druid by druid-io.

the class AnnouncerTest method testSanity.

@Test(timeout = 60_000L)
public void testSanity() throws Exception {
    curator.start();
    curator.blockUntilConnected();
    Announcer announcer = new Announcer(curator, exec);
    announcer.initializeAddedChildren();
    final byte[] billy = StringUtils.toUtf8("billy");
    final String testPath1 = "/test1";
    final String testPath2 = "/somewhere/test2";
    announcer.announce(testPath1, billy);
    Assert.assertNull("/test1 does not exists", curator.checkExists().forPath(testPath1));
    Assert.assertNull("/somewhere/test2 does not exists", curator.checkExists().forPath(testPath2));
    announcer.start();
    while (!announcer.getAddedChildren().contains("/test1")) {
        Thread.sleep(100);
    }
    try {
        Assert.assertArrayEquals("/test1 has data", billy, curator.getData().decompressed().forPath(testPath1));
        Assert.assertNull("/somewhere/test2 still does not exist", curator.checkExists().forPath(testPath2));
        announcer.announce(testPath2, billy);
        Assert.assertArrayEquals("/test1 still has data", billy, curator.getData().decompressed().forPath(testPath1));
        Assert.assertArrayEquals("/somewhere/test2 has data", billy, curator.getData().decompressed().forPath(testPath2));
        final CountDownLatch latch = new CountDownLatch(1);
        curator.getCuratorListenable().addListener(new CuratorListener() {

            @Override
            public void eventReceived(CuratorFramework client, CuratorEvent event) {
                if (event.getType() == CuratorEventType.CREATE && event.getPath().equals(testPath1)) {
                    latch.countDown();
                }
            }
        });
        final CuratorOp deleteOp = curator.transactionOp().delete().forPath(testPath1);
        final Collection<CuratorTransactionResult> results = curator.transaction().forOperations(deleteOp);
        Assert.assertEquals(1, results.size());
        final CuratorTransactionResult result = results.iterator().next();
        // assert delete
        Assert.assertEquals(Code.OK.intValue(), result.getError());
        Assert.assertTrue("Wait for /test1 to be created", timing.forWaiting().awaitLatch(latch));
        Assert.assertArrayEquals("expect /test1 data is restored", billy, curator.getData().decompressed().forPath(testPath1));
        Assert.assertArrayEquals("expect /somewhere/test2 is still there", billy, curator.getData().decompressed().forPath(testPath2));
        announcer.unannounce(testPath1);
        Assert.assertNull("expect /test1 unannounced", curator.checkExists().forPath(testPath1));
        Assert.assertArrayEquals("expect /somewhere/test2 is still still there", billy, curator.getData().decompressed().forPath(testPath2));
    } finally {
        announcer.stop();
    }
    Assert.assertNull("expect /test1 remains unannounced", curator.checkExists().forPath(testPath1));
    Assert.assertNull("expect /somewhere/test2 unannounced", curator.checkExists().forPath(testPath2));
}
Also used : CuratorFramework(org.apache.curator.framework.CuratorFramework) CuratorOp(org.apache.curator.framework.api.transaction.CuratorOp) CuratorListener(org.apache.curator.framework.api.CuratorListener) CuratorEvent(org.apache.curator.framework.api.CuratorEvent) CountDownLatch(java.util.concurrent.CountDownLatch) CuratorTransactionResult(org.apache.curator.framework.api.transaction.CuratorTransactionResult) Test(org.junit.Test)

Aggregations

CuratorFramework (org.apache.curator.framework.CuratorFramework)23 CuratorEvent (org.apache.curator.framework.api.CuratorEvent)23 CuratorListener (org.apache.curator.framework.api.CuratorListener)23 CountDownLatch (java.util.concurrent.CountDownLatch)16 RetryOneTime (org.apache.curator.retry.RetryOneTime)9 KeeperException (org.apache.zookeeper.KeeperException)9 Test (org.testng.annotations.Test)9 Test (org.junit.Test)6 WatchedEvent (org.apache.zookeeper.WatchedEvent)3 IOException (java.io.IOException)2 Map (java.util.Map)2 BackgroundCallback (org.apache.curator.framework.api.BackgroundCallback)2 BindException (java.net.BindException)1 UnknownHostException (java.net.UnknownHostException)1 TreeMap (java.util.TreeMap)1 LinkedBlockingQueue (java.util.concurrent.LinkedBlockingQueue)1 CuratorFrameworkFactory (org.apache.curator.framework.CuratorFrameworkFactory)1 UnhandledErrorListener (org.apache.curator.framework.api.UnhandledErrorListener)1 CuratorOp (org.apache.curator.framework.api.transaction.CuratorOp)1 CuratorTransactionResult (org.apache.curator.framework.api.transaction.CuratorTransactionResult)1