Search in sources :

Example 51 with CuratorEvent

use of org.apache.curator.framework.api.CuratorEvent in project Singularity by HubSpot.

the class CuratorAsyncManager method getAsyncThrows.

private <T> Map<String, T> getAsyncThrows(final String pathNameForLogs, final Collection<String> paths, final Transcoder<T> transcoder, final Optional<ZkCache<T>> cache) throws Exception {
    final Map<String, T> objects = new HashMap<>(paths.size());
    if (cache.isPresent()) {
        for (Iterator<String> itr = paths.iterator(); itr.hasNext(); ) {
            final String path = itr.next();
            final Optional<T> fromCache = cache.get().get(path);
            if (fromCache.isPresent()) {
                objects.put(path, fromCache.get());
                itr.remove();
            }
        }
    }
    if (paths.isEmpty()) {
        return objects;
    }
    final Map<String, T> synchronizedObjects = Collections.synchronizedMap(objects);
    final CountDownLatch latch = new CountDownLatch(paths.size());
    final AtomicInteger bytes = new AtomicInteger();
    final BackgroundCallback callback = new BackgroundCallback() {

        @Override
        public void processResult(CuratorFramework client, CuratorEvent event) throws Exception {
            try {
                if (event.getData() == null || event.getData().length == 0) {
                    LOG.trace("Expected active node {} but it wasn't there", event.getPath());
                    return;
                }
                bytes.getAndAdd(event.getData().length);
                final T object = transcoder.fromBytes(event.getData());
                synchronizedObjects.put(event.getPath(), object);
                if (cache.isPresent()) {
                    cache.get().set(event.getPath(), object);
                }
            } finally {
                latch.countDown();
            }
        }
    };
    return queryAndReturnResultsThrows(objects, paths, callback, latch, pathNameForLogs, bytes, CuratorQueryMethod.GET_DATA);
}
Also used : CuratorFramework(org.apache.curator.framework.CuratorFramework) HashMap(java.util.HashMap) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) BackgroundCallback(org.apache.curator.framework.api.BackgroundCallback) CuratorEvent(org.apache.curator.framework.api.CuratorEvent) CountDownLatch(java.util.concurrent.CountDownLatch)

Aggregations

CuratorEvent (org.apache.curator.framework.api.CuratorEvent)51 CuratorFramework (org.apache.curator.framework.CuratorFramework)48 BackgroundCallback (org.apache.curator.framework.api.BackgroundCallback)32 CountDownLatch (java.util.concurrent.CountDownLatch)28 Test (org.testng.annotations.Test)21 CuratorListener (org.apache.curator.framework.api.CuratorListener)18 RetryOneTime (org.apache.curator.retry.RetryOneTime)18 KeeperException (org.apache.zookeeper.KeeperException)12 Test (org.junit.Test)7 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)6 Watcher (org.apache.zookeeper.Watcher)5 Timing (org.apache.curator.test.Timing)4 WatchedEvent (org.apache.zookeeper.WatchedEvent)4 IOException (java.io.IOException)3 RetryNTimes (org.apache.curator.retry.RetryNTimes)3 InvocationOnMock (org.mockito.invocation.InvocationOnMock)3 Message (com.google.protobuf.Message)2 ArrayList (java.util.ArrayList)2 HashMap (java.util.HashMap)2 Map (java.util.Map)2