List of usage examples for org.apache.zookeeper Watcher Watcher
Watcher
From source file:com.twitter.common.zookeeper.ZooKeeperMap.java
License:Apache License
private synchronized void watchChildren() throws InterruptedException, KeeperException, ZooKeeperConnectionException { /*//from www . j av a2s .c o m * Add a watch on the parent node itself, and attempt to rewatch if it * gets deleted */ zkClient.get().exists(nodePath, new Watcher() { @Override public void process(WatchedEvent event) { if (event.getType() == Watcher.Event.EventType.NodeDeleted) { // If the parent node no longer exists localMap.clear(); try { tryWatchChildren(); } catch (InterruptedException e) { LOG.log(Level.WARNING, "Interrupted while trying to watch children.", e); Thread.currentThread().interrupt(); } } } }); final Watcher childWatcher = new Watcher() { @Override public void process(WatchedEvent event) { if (event.getType() == Watcher.Event.EventType.NodeChildrenChanged) { try { tryWatchChildren(); } catch (InterruptedException e) { LOG.log(Level.WARNING, "Interrupted while trying to watch children.", e); Thread.currentThread().interrupt(); } } } }; List<String> children = zkClient.get().getChildren(nodePath, childWatcher); updateChildren(Sets.newHashSet(children)); }
From source file:com.twitter.common.zookeeper.ZooKeeperMap.java
License:Apache License
private void addChild(final String child) throws InterruptedException, KeeperException, ZooKeeperConnectionException { final Watcher nodeWatcher = new Watcher() { @Override//from w w w . j a v a 2s . co m public void process(WatchedEvent event) { if (event.getType() == Watcher.Event.EventType.NodeDataChanged) { try { tryAddChild(child); } catch (InterruptedException e) { LOG.log(Level.WARNING, "Interrupted while trying to add a child.", e); Thread.currentThread().interrupt(); } } else if (event.getType() == Watcher.Event.EventType.NodeDeleted) { removeEntry(child); } } }; try { V value = deserializer.apply(zkClient.get().getData(makePath(child), nodeWatcher, null)); putEntry(child, value); } catch (KeeperException.NoNodeException e) { // This node doesn't exist anymore, remove it from the map and we're done. removeEntry(child); } }
From source file:com.twitter.distributedlog.BKLogHandler.java
License:Apache License
Watcher registerExpirationHandler(final ZooKeeperClient.ZooKeeperSessionExpireNotifier onExpired) { if (conf.getZKNumRetries() > 0) { return new Watcher() { @Override//from w ww .j a v a2 s .co m public void process(WatchedEvent event) { // nop } }; } return zooKeeperClient.registerExpirationHandler(onExpired); }
From source file:com.twitter.distributedlog.LocalDLMEmulator.java
License:Apache License
public static ZooKeeper connectZooKeeper(String zkHost, int zkPort, int zkTimeoutSec) throws IOException, KeeperException, InterruptedException { final CountDownLatch latch = new CountDownLatch(1); final String zkHostPort = zkHost + ":" + zkPort; ZooKeeper zkc = new ZooKeeper(zkHostPort, zkTimeoutSec * 1000, new Watcher() { public void process(WatchedEvent event) { if (event.getState() == Event.KeeperState.SyncConnected) { latch.countDown();/* www. j a va 2 s . c o m*/ } } }); if (!latch.await(zkTimeoutSec, TimeUnit.SECONDS)) { throw new IOException("Zookeeper took too long to connect"); } return zkc; }
From source file:com.twitter.distributedlog.TestZooKeeperClient.java
License:Apache License
private void expireZooKeeperSession(ZooKeeper zk, int timeout) throws IOException, InterruptedException, KeeperException { final CountDownLatch latch = new CountDownLatch(1); ZooKeeper newZk = new ZooKeeper(zkServers, timeout, new Watcher() { @Override/* w w w . j a va2s.c o m*/ public void process(WatchedEvent event) { if (event.getType() == EventType.None && event.getState() == KeeperState.SyncConnected) { latch.countDown(); } } }, zk.getSessionId(), zk.getSessionPasswd()); if (!latch.await(timeout, TimeUnit.MILLISECONDS)) { throw KeeperException.create(KeeperException.Code.CONNECTIONLOSS); } newZk.close(); }
From source file:com.twitter.distributedlog.TestZooKeeperClient.java
License:Apache License
private CountDownLatch awaitConnectionEvent(final KeeperState state, final ZooKeeperClient zkc) { final CountDownLatch connected = new CountDownLatch(1); Watcher watcher = new Watcher() { @Override//w w w .ja v a 2s. c o m public void process(WatchedEvent event) { if (event.getType() == EventType.None && event.getState() == state) { connected.countDown(); } } }; zkc.register(watcher); return connected; }
From source file:com.twitter.distributedlog.TestZooKeeperClient.java
License:Apache License
@Test(timeout = 60000) public void testExceptionOnWatchers() throws Exception { TestWatcher w1 = new TestWatcher(); TestWatcher w2 = new TestWatcher(); final CountDownLatch latch = new CountDownLatch(2); w1.setLatch(latch);// w w w. j a va2s . co m w2.setLatch(latch); zkc.register(w1); zkc.register(w2); // register bad watcher zkc.register(new Watcher() { @Override public void process(WatchedEvent event) { throw new NullPointerException("bad watcher returning null"); } }); assertEquals(3, zkc.watchers.size()); final String zkPath = "/test-exception-on-watchers"; zkc.get().create(zkPath, new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); zkc.get().getData(zkPath, true, new Stat()); zkc.get().setData(zkPath, "first-set".getBytes(), -1); latch.await(); assertEquals(1, w1.receivedEvents.size()); assertEquals(zkPath, w1.receivedEvents.get(0).getPath()); assertEquals(Watcher.Event.EventType.NodeDataChanged, w1.receivedEvents.get(0).getType()); assertEquals(1, w2.receivedEvents.size()); assertEquals(zkPath, w2.receivedEvents.get(0).getPath()); assertEquals(Watcher.Event.EventType.NodeDataChanged, w2.receivedEvents.get(0).getType()); }
From source file:com.twitter.distributedlog.zk.TestZKWatcherManager.java
License:Apache License
@Test(timeout = 60000) public void testRegisterUnregisterWatcher() throws Exception { ZKWatcherManager watcherManager = ZKWatcherManager.newBuilder().name("test-register-unregister-watcher") .statsLogger(NullStatsLogger.INSTANCE).build(); String path = "/test-register-unregister-watcher"; final List<WatchedEvent> events = new LinkedList<WatchedEvent>(); final CountDownLatch latch = new CountDownLatch(2); Watcher watcher = new Watcher() { @Override//from w w w.j a va 2 s . c o m public void process(WatchedEvent event) { events.add(event); latch.countDown(); } }; watcherManager.registerChildWatcher(path, watcher); // fire the event WatchedEvent event0 = new WatchedEvent(Watcher.Event.EventType.NodeCreated, Watcher.Event.KeeperState.SyncConnected, path); WatchedEvent event1 = new WatchedEvent(Watcher.Event.EventType.None, Watcher.Event.KeeperState.SyncConnected, path); WatchedEvent event2 = new WatchedEvent(Watcher.Event.EventType.NodeChildrenChanged, Watcher.Event.KeeperState.SyncConnected, path); watcher.process(event1); watcher.process(event2); latch.await(); assertEquals(2, events.size()); assertEquals(event1, events.get(0)); assertEquals(event2, events.get(1)); // unregister watcher watcherManager.unregisterChildWatcher(path, watcher); assertEquals(0, watcherManager.childWatches.size()); }
From source file:com.twitter.distributedlog.ZooKeeperClient.java
License:Apache License
private ZooKeeper buildZooKeeper() throws ZooKeeperConnectionException, InterruptedException { Watcher watcher = new Watcher() { @Override/*from w ww. j av a2 s. co m*/ public void process(WatchedEvent event) { switch (event.getType()) { case None: switch (event.getState()) { case Expired: if (null == retryPolicy) { LOG.info("ZooKeeper {}' session expired. Event: {}", name, event); closeInternal(); } authenticated = false; break; case Disconnected: if (null == retryPolicy) { LOG.info("ZooKeeper {} is disconnected from zookeeper now," + " but it is OK unless we received EXPIRED event.", name); } // Mark as not authenticated if expired or disconnected. In both cases // we lose any attached auth info. Relying on Expired/Disconnected is // sufficient since all Expired/Disconnected events are processed before // all SyncConnected events, and the underlying member is not updated until // SyncConnected is received. authenticated = false; break; default: break; } } try { for (Watcher watcher : watchers) { try { watcher.process(event); } catch (Throwable t) { LOG.warn("Encountered unexpected exception from watcher {} : ", watcher, t); } } } catch (Throwable t) { LOG.warn("Encountered unexpected exception when firing watched event {} : ", event, t); } } }; Set<Watcher> watchers = new HashSet<Watcher>(); watchers.add(watcher); ZooKeeper zk; try { RetryPolicy opRetryPolicy = null == retryPolicy ? new BoundExponentialBackoffRetryPolicy(sessionTimeoutMs, sessionTimeoutMs, 0) : retryPolicy; RetryPolicy connectRetryPolicy = null == retryPolicy ? new BoundExponentialBackoffRetryPolicy(sessionTimeoutMs, sessionTimeoutMs, 0) : new BoundExponentialBackoffRetryPolicy(sessionTimeoutMs, sessionTimeoutMs, Integer.MAX_VALUE); zk = org.apache.bookkeeper.zookeeper.ZooKeeperClient.newBuilder().connectString(zooKeeperServers) .sessionTimeoutMs(sessionTimeoutMs).watchers(watchers).operationRetryPolicy(opRetryPolicy) .connectRetryPolicy(connectRetryPolicy).statsLogger(statsLogger) .retryThreadCount(retryThreadCount).requestRateLimit(requestRateLimit).build(); } catch (KeeperException e) { throw new ZooKeeperConnectionException("Problem connecting to servers: " + zooKeeperServers, e); } catch (IOException e) { throw new ZooKeeperConnectionException("Problem connecting to servers: " + zooKeeperServers, e); } return zk; }
From source file:com.twitter.distributedlog.ZooKeeperClient.java
License:Apache License
/** * Clients that need to re-establish state after session expiration can register an * {@code onExpired} command to execute. * * @param onExpired the {@code Command} to register * @return the new {@link Watcher} which can later be passed to {@link #unregister} for * removal./*from w w w. j av a 2 s. co m*/ */ public Watcher registerExpirationHandler(final ZooKeeperSessionExpireNotifier onExpired) { Watcher watcher = new Watcher() { @Override public void process(WatchedEvent event) { if (event.getType() == EventType.None && event.getState() == KeeperState.Expired) { try { onExpired.notifySessionExpired(); } catch (Exception exc) { // do nothing } } } }; register(watcher); return watcher; }