List of usage examples for org.apache.zookeeper WatchedEvent WatchedEvent
public WatchedEvent(EventType eventType, KeeperState keeperState, String path)
From source file:com.talis.platform.sequencing.zookeeper.ZooKeeperProviderTest.java
License:Apache License
@Test public void ifExpiredEventReceivedDisposeOfInstance() throws Exception { final ZooKeeperProvider provider = new ZooKeeperProvider(); ZooKeeper first = provider.get();//from ww w .ja v a 2s . co m WatchedEvent sessionExpiredEvent = new WatchedEvent(Watcher.Event.EventType.None, Watcher.Event.KeeperState.Expired, null); provider.process(sessionExpiredEvent); ZooKeeper second = provider.get(); assertNotSame(first, second); }
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/*ww w . ja v a 2s . c om*/ 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.yahoo.pulsar.zookeeper.ZookeeperCacheTest.java
License:Apache License
@Test void testSimpleCache() throws Exception { ZooKeeperCache zkCacheService = new LocalZooKeeperCache(zkClient, null /* no executors in unit test */); ZooKeeperDataCache<String> zkCache = new ZooKeeperDataCache<String>(zkCacheService) { @Override/*from w w w. j a v a2s . co m*/ public String deserialize(String key, byte[] content) throws Exception { return new String(content); } }; String value = "test"; zkClient.create("/my_test", value.getBytes(), null, null); assertEquals(zkCache.get("/my_test").get(), value); String newValue = "test2"; zkClient.setData("/my_test", newValue.getBytes(), -1); // Wait for the watch to be triggered Thread.sleep(100); assertEquals(zkCache.get("/my_test").get(), newValue); zkCacheService.process(new WatchedEvent(Event.EventType.None, KeeperState.Expired, null)); assertEquals(zkCache.get("/my_test").get(), newValue); zkClient.failNow(Code.SESSIONEXPIRED); assertEquals(zkCache.get("/my_test").get(), newValue); try { zkCache.get("/other"); fail("shuld have thrown exception"); } catch (Exception e) { // Ok } }
From source file:com.yahoo.pulsar.zookeeper.ZookeeperCacheTest.java
License:Apache License
@Test void testChildrenCache() throws Exception { OrderedSafeExecutor executor = new OrderedSafeExecutor(1, "test"); zkClient.create("/test", new byte[0], null, null); ZooKeeperCache zkCacheService = new LocalZooKeeperCache(zkClient, executor); ZooKeeperChildrenCache cache = new ZooKeeperChildrenCache(zkCacheService, "/test"); // Create callback counter AtomicInteger notificationCount = new AtomicInteger(0); ZooKeeperCacheListener<Set<String>> counter = (path, data, stat) -> { notificationCount.incrementAndGet(); };/*from w w w . j a v a2 s.c o m*/ // Register counter twice and unregister once, so callback should be counted correctly cache.registerListener(counter); cache.registerListener(counter); cache.unregisterListener(counter); assertEquals(notificationCount.get(), 0); assertEquals(cache.get(), Sets.newTreeSet()); zkClient.create("/test/z1", new byte[0], null, null); zkClient.create("/test/z2", new byte[0], null, null); // Wait for cache to be updated in background while (notificationCount.get() < 2) { Thread.sleep(1); } assertEquals(cache.get(), new TreeSet<String>(Lists.newArrayList("z1", "z2"))); assertEquals(cache.get("/test"), new TreeSet<String>(Lists.newArrayList("z1", "z2"))); assertEquals(notificationCount.get(), 2); zkClient.delete("/test/z2", -1); while (notificationCount.get() < 3) { Thread.sleep(1); } assertEquals(cache.get(), new TreeSet<String>(Lists.newArrayList("z1"))); assertEquals(cache.get(), new TreeSet<String>(Lists.newArrayList("z1"))); zkCacheService.process(new WatchedEvent(Event.EventType.None, KeeperState.Expired, null)); zkClient.failNow(Code.SESSIONEXPIRED); try { cache.get(); fail("shuld have thrown exception"); } catch (Exception e) { // Ok } assertEquals(notificationCount.get(), 3); }
From source file:com.yahoo.pulsar.zookeeper.ZookeeperCacheTest.java
License:Apache License
@Test void testGlobalZooKeeperCache() throws Exception { OrderedSafeExecutor executor = new OrderedSafeExecutor(1, "test"); ScheduledExecutorService scheduledExecutor = new ScheduledThreadPoolExecutor(1); MockZooKeeper zkc = MockZooKeeper.newInstance(); ZooKeeperClientFactory zkClientfactory = new ZooKeeperClientFactory() { @Override/*ww w . j ava 2s. c om*/ public CompletableFuture<ZooKeeper> create(String serverList, SessionType sessionType, int zkSessionTimeoutMillis) { return CompletableFuture.completedFuture(zkc); } }; GlobalZooKeeperCache zkCacheService = new GlobalZooKeeperCache(zkClientfactory, -1, "", executor, scheduledExecutor); zkCacheService.start(); zkClient = (MockZooKeeper) zkCacheService.getZooKeeper(); ZooKeeperDataCache<String> zkCache = new ZooKeeperDataCache<String>(zkCacheService) { @Override public String deserialize(String key, byte[] content) throws Exception { return new String(content); } }; // Create callback counter AtomicInteger notificationCount = new AtomicInteger(0); ZooKeeperCacheListener<String> counter = (path, data, stat) -> { notificationCount.incrementAndGet(); }; // Register counter twice and unregister once, so callback should be counted correctly zkCache.registerListener(counter); zkCache.registerListener(counter); zkCache.unregisterListener(counter); String value = "test"; zkClient.create("/my_test", value.getBytes(), null, null); assertEquals(zkCache.get("/my_test").get(), value); String newValue = "test2"; // case 1: update and create znode directly and verify that the cache is retrieving the correct data assertEquals(notificationCount.get(), 0); zkClient.setData("/my_test", newValue.getBytes(), -1); zkClient.create("/my_test2", value.getBytes(), null, null); // Wait for the watch to be triggered while (notificationCount.get() < 1) { Thread.sleep(1); } // retrieve the data from the cache and verify it is the updated/new data assertEquals(zkCache.get("/my_test").get(), newValue); assertEquals(zkCache.get("/my_test2").get(), value); // The callback method should be called just only once assertEquals(notificationCount.get(), 1); // case 2: force the ZooKeeper session to be expired and verify that the data is still accessible zkCacheService.process(new WatchedEvent(Event.EventType.None, KeeperState.Expired, null)); assertEquals(zkCache.get("/my_test").get(), newValue); assertEquals(zkCache.get("/my_test2").get(), value); // case 3: update the znode directly while the client session is marked as expired. Verify that the new updates // is not seen in the cache zkClient.create("/other", newValue.getBytes(), null, null); zkClient.failNow(Code.SESSIONEXPIRED); assertEquals(zkCache.get("/my_test").get(), newValue); assertEquals(zkCache.get("/my_test2").get(), value); try { zkCache.get("/other"); fail("shuld have thrown exception"); } catch (Exception e) { // Ok } // case 4: directly delete the znode while the session is not re-connected yet. Verify that the deletion is not // seen by the cache zkClient.failAfter(-1, Code.OK); zkClient.delete("/my_test2", -1); zkCacheService.process(new WatchedEvent(Event.EventType.None, KeeperState.SyncConnected, null)); assertEquals(zkCache.get("/other").get(), newValue); // Make sure that the value is now directly from ZK and deleted assertFalse(zkCache.get("/my_test2").isPresent()); // case 5: trigger a ZooKeeper disconnected event and make sure the cache content is not changed. zkCacheService.process(new WatchedEvent(Event.EventType.None, KeeperState.Disconnected, null)); zkClient.create("/other2", newValue.getBytes(), null, null); // case 6: trigger a ZooKeeper SyncConnected event and make sure that the cache content is invalidated s.t. we // can see the updated content now zkCacheService.process(new WatchedEvent(Event.EventType.None, KeeperState.SyncConnected, null)); // make sure that we get it assertEquals(zkCache.get("/other2").get(), newValue); zkCacheService.close(); executor.shutdown(); // Update shouldn't happen after the last check assertEquals(notificationCount.get(), 1); }
From source file:com.yahoo.pulsar.zookeeper.ZooKeeperSessionWatcherTest.java
License:Apache License
@Test void testProcess1() { WatchedEvent event = new WatchedEvent(EventType.None, KeeperState.Expired, null); sessionWatcher.process(event);/* ww w . j a v a 2 s . c o m*/ assertTrue(sessionWatcher.isShutdownStarted()); assertEquals(shutdownService.getExitCode(), -1); }
From source file:com.yahoo.pulsar.zookeeper.ZooKeeperSessionWatcherTest.java
License:Apache License
@Test void testProcess2() { WatchedEvent event = new WatchedEvent(EventType.None, KeeperState.Disconnected, null); sessionWatcher.process(event);//from w w w . ja v a 2s .c om assertFalse(sessionWatcher.isShutdownStarted()); assertEquals(shutdownService.getExitCode(), 0); }
From source file:com.yahoo.pulsar.zookeeper.ZooKeeperSessionWatcherTest.java
License:Apache License
@Test void testProcess3() { WatchedEvent event = new WatchedEvent(EventType.NodeCreated, KeeperState.Expired, null); sessionWatcher.process(event);/*from w ww. ja v a 2 s . co m*/ assertFalse(sessionWatcher.isShutdownStarted()); assertEquals(shutdownService.getExitCode(), 0); }
From source file:com.yihaodian.architecture.zkclient.InMemoryConnection.java
License:Apache License
@Override public void connect(Watcher watcher) { _lock.lock();//from w ww. j ava 2 s. c om try { if (_eventThread != null) { throw new IllegalStateException("Already connected."); } _eventThread = new EventThread(watcher); _eventThread.start(); _eventThread.send(new WatchedEvent(null, KeeperState.SyncConnected, null)); } finally { _lock.unlock(); } }
From source file:com.yihaodian.architecture.zkclient.InMemoryConnection.java
License:Apache License
private void checkWatch(Set<String> watches, String path, EventType eventType) { if (watches.contains(path)) { watches.remove(path);/*w w w. j a v a 2s. c o m*/ _eventThread.send(new WatchedEvent(eventType, KeeperState.SyncConnected, path)); } }