@Override public void process(WatchedEvent event) { ReplyHeader h = new ReplyHeader(-1, -1L, 0); if (LOG.isTraceEnabled()) { ZooTrace.logTraceMessage(LOG, ZooTrace.EVENT_DELIVERY_TRACE_MASK, "Deliver event " + event + " to 0x" + Long.toHexString(this.sessionId) + " through " + this); } // Convert WatchedEvent to a type that can be sent over the wire WatcherEvent e = event.getWrapper(); try { sendResponse(h, e, "notification"); } catch (IOException e1) { if (LOG.isDebugEnabled()) { LOG.debug("Problem sending to " + getRemoteSocketAddress(), e1); } close(); } }
private static ZooKeeper connectZooKeeper(String ensemble) throws IOException, KeeperException, InterruptedException { final CountDownLatch latch = new CountDownLatch(1); ZooKeeper zkc = new ZooKeeper(HOSTPORT, ZK_SESSION_TIMEOUT, new Watcher() { public void process(WatchedEvent event) { if (event.getState() == Watcher.Event.KeeperState.SyncConnected) { latch.countDown(); } } }); if (!latch.await(ZK_SESSION_TIMEOUT, TimeUnit.MILLISECONDS)) { throw new IOException("Zookeeper took too long to connect"); } return zkc; }
/** * 获取Zookeeper连接 * @return */ public static ZooKeeper getZooKeeperConnection() { try { // Zookeeper连接闭锁cdl final CountDownLatch cdl = new CountDownLatch(1); final ZooKeeper zooKeeper = new ZooKeeper(connectString, sessionTimeout, new Watcher() { @Override public void process(WatchedEvent watchedEvent) { if (watchedEvent.getState() == Event.KeeperState.SyncConnected) { // 当连接成功时放开cdl cdl.countDown(); } } }); // cdl阻塞 cdl.await(); return zooKeeper; } catch (Exception e) { e.printStackTrace(); return null; } }
private void processStateChanged(WatchedEvent event) { logger.info("zookeeper state changed (" + event.getState() + ")"); setCurrentState(event.getState()); if (getShutdownTrigger()) { return; } try { fireStateChangedEvent(event.getState()); if (event.getState() == KeeperState.Expired) { reconnect(); fireNewSessionEvents(); } } catch (final Exception e) { throw new RuntimeException("Exception while restarting zk client", e); } }
private void processDataOrChildChange(WatchedEvent event) { final String path = event.getPath(); if (event.getType() == EventType.NodeChildrenChanged || event.getType() == EventType.NodeCreated || event.getType() == EventType.NodeDeleted) { Set<IZkChildListener> childListeners = _childListener.get(path); if (childListeners != null && !childListeners.isEmpty()) { fireChildChangedEvents(path, childListeners); } } if (event.getType() == EventType.NodeDataChanged || event.getType() == EventType.NodeDeleted || event.getType() == EventType.NodeCreated) { Set<IZkDataListener> listeners = _dataListener.get(path); if (listeners != null && !listeners.isEmpty()) { fireDataChangedEvents(event.getPath(), listeners); } } }
private void watchNode(final ZooKeeper zk) { try { List<String> nodeList = zk.getChildren(Constant.ZK_REGISTRY_PATH, new Watcher() { public void process(WatchedEvent event) { if (event.getType() == Event.EventType.NodeChildrenChanged) { watchNode(zk); } } }); List<String> dataList = new ArrayList<>(); for (String node : nodeList) { byte[] bytes = zk.getData(Constant.ZK_REGISTRY_PATH + "/" + node, false, null); dataList.add(new String(bytes)); } LOGGER.debug("node data: {}", dataList); this.dataList = dataList; LOGGER.debug("Service discovery triggered updating connected server node."); updateConnectedServer(); } catch (Exception e) { LOGGER.error("", e); } }
@Override public void process(WatchedEvent event) { try { /* 重新注册节点 */ zkClient.exists(nodePath, this); EventType eventType = event.getType(); switch (eventType) { case NodeDeleted: createNode(); break; default: break; } } catch (Exception e) { log.error("error", e); } }
@Override public void process(WatchedEvent event) { ZooKeeper zkClient = zookeeperConnManager.getZkClient(); try { /* 重新注册节点 */ zkClient.exists(nodePath, this); EventType eventType = event.getType(); switch (eventType) { case NodeDeleted: election(); break; default: break; } } catch (Exception e) { log.error("error", e); } }
@Override public void process(WatchedEvent event) { if (isDestroyed()) { return; } if (!getZooKeeperConnection().isConnected()) { return; } String eventPath = event.getPath(); EventType eventType = event.getType(); Znode znode = getData(); String path = znode.getPath(); if (path.equals(eventPath) && eventType.equals(EventType.NodeDeleted)) { destroy(); return; } processUpdate(event); fireDataModelDataChanged(); }
@Override public synchronized void processWatchEvent(ZooKeeper zk, WatchedEvent event) throws Exception { if (forExpire) { // a hack... couldn't find a way to trigger expired event. WatchedEvent expriredEvent = new WatchedEvent( Watcher.Event.EventType.None, Watcher.Event.KeeperState.Expired, null); super.processWatchEvent(zk, expriredEvent); forExpire = false; syncBarrier.await(); } else { super.processWatchEvent(zk, event); } }
public void process(WatchedEvent event) { if (!closed) { try { if (event.getType() != EventType.NodeDeleted) { Stat s = zooKeeper.exists(nodePath, this); if (s != null) { zookeeper.getChildren(nodePath, this); } } } catch (Exception e) { LoggerFactory.getLogger().error( "Error occured re-adding node watcherfor node " + nodePath, e); } nodeListener.processEvent(event.getPath(), event.getType() .name(), null); } }
@Test(timeout = 60000) public void testRootWatchTriggered() throws Exception { class MyWatcher implements Watcher{ boolean fired=false; public void process(WatchedEvent event) { if(event.getPath().equals("/")) fired=true; } } MyWatcher watcher=new MyWatcher(); // set a watch on the root node dt.getChildren("/", new Stat(), watcher); // add a new node, should trigger a watch dt.createNode("/xyz", new byte[0], null, 0, dt.getNode("/").stat.getCversion()+1, 1, 1); Assert.assertFalse("Root node watch not triggered",!watcher.fired); }
private void processStateChanged(WatchedEvent event) { LOG.info("zookeeper state changed (" + event.getState() + ")"); setCurrentState(event.getState()); if (getShutdownTrigger()) { return; } try { fireStateChangedEvent(event.getState()); if (event.getState() == KeeperState.Expired) { reconnect(); fireNewSessionEvents(); } } catch (final Exception e) { throw new RuntimeException("Exception while restarting zk client", e); } }
public void process(WatchedEvent event) { if (!closed) { try { if (event.getType() != EventType.NodeDeleted) { Stat s = zooKeeper.exists(nodePath, this); if (s != null) { zookeeper.getChildren(nodePath, this); } } } catch (Exception e) { LoggerFactory.getLogger().error( "Error occurred re-adding node watcherfor node " + nodePath, e); } nodeListener.processEvent(event.getPath(), event.getType() .name(), null); } }
public void process(WatchedEvent event) { if (event.getState() == KeeperState.SyncConnected) { if (latch != null) { latch.countDown(); } } if (event.getType() == EventType.None) { return; } try { events.put(event); } catch (InterruptedException e) { Assert.assertTrue("interruption unexpected", false); } }
@Override public void process(WatchedEvent event) { switch (event.getState()) { case Disconnected: logger.warn("Disconnected from ZooKeeper quorum."); zooKeeperConnection.observers .forEach(ZooKeeperConnectionObserver::disconnected); break; case Expired: zooKeeperConnection.reset(); break; case SyncConnected: zooKeeperConnection.observers.forEach(ZooKeeperConnectionObserver::connected); break; case AuthFailed: case ConnectedReadOnly: case SaslAuthenticated: break; default: break; } }
static ZooKeeper connectZooKeeper() throws IOException, KeeperException, InterruptedException { final CountDownLatch latch = new CountDownLatch(1); ZooKeeper zkc = new ZooKeeper(zkEnsemble, 3600, new Watcher() { public void process(WatchedEvent event) { if (event.getState() == Watcher.Event.KeeperState.SyncConnected) { latch.countDown(); } } }); if (!latch.await(3, TimeUnit.SECONDS)) { throw new IOException("Zookeeper took too long to connect"); } return zkc; }
private static ZooKeeper connectZooKeeper(String ensemble) throws IOException, KeeperException, InterruptedException { final CountDownLatch latch = new CountDownLatch(1); ZooKeeper zkc = new ZooKeeper(HOSTPORT, 3600, new Watcher() { public void process(WatchedEvent event) { if (event.getState() == Watcher.Event.KeeperState.SyncConnected) { latch.countDown(); } } }); if (!latch.await(10, TimeUnit.SECONDS)) { throw new IOException("Zookeeper took too long to connect"); } return zkc; }
/** * It listen to Zookeeper events. * It is called automatically by Zookeeper when a Kafka broker znode has appeared/disappeared or * session connect/disconnect * * @param event {@link WatchedEvent} instance sent by Zookeeper node */ @Override public void process(final WatchedEvent event) { if (zkClient == null) { return; } if (event.getType() != Event.EventType.None) { setupWatcherAsync(); // Must initialize the watcher because it is one-shot. switch (event.getType()) { case NodeChildrenChanged: // A kafka broker has appeared / disappeared updateBrokerStatus(); // Force to update brokers' status break; default: } } else { switch (event.getState()) { case SyncConnected: case Disconnected: updateBrokerStatus(); // Force to update brokers' status break; case Expired: restartZKConnection(); // ZK connection has expired, let's reconnect break; default: } } }
/** * verify becomeStandby is not called if already in standby */ @Test public void testSuccessiveStandbyCalls() { elector.joinElection(data); // make the object go into the monitoring standby state elector.processResult(Code.NODEEXISTS.intValue(), ZK_LOCK_NAME, mockZK, ZK_LOCK_NAME); Mockito.verify(mockApp, Mockito.times(1)).becomeStandby(); verifyExistCall(1); WatchedEvent mockEvent = Mockito.mock(WatchedEvent.class); Mockito.when(mockEvent.getPath()).thenReturn(ZK_LOCK_NAME); // notify node deletion // monitoring should be setup again after event is received Mockito.when(mockEvent.getType()).thenReturn(Event.EventType.NodeDeleted); elector.processWatchEvent(mockZK, mockEvent); // is standby. no need to notify anything now Mockito.verify(mockApp, Mockito.times(0)).enterNeutralMode(); // another joinElection called. Mockito.verify(mockZK, Mockito.times(2)).create(ZK_LOCK_NAME, data, Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL, elector, mockZK); // lost election elector.processResult(Code.NODEEXISTS.intValue(), ZK_LOCK_NAME, mockZK, ZK_LOCK_NAME); // still standby. so no need to notify again Mockito.verify(mockApp, Mockito.times(1)).becomeStandby(); // monitor is set again verifyExistCall(2); }
@Override public void process(WatchedEvent event) { // TODO Auto-generated method stub System.out.println("Receive Watcher Event:" + event); if (KeeperState.SyncConnected == event.getState()) { countDownLatch.countDown(); } }
@Override public void process(WatchedEvent watchedEvent) { LOGGER.info(String.format("%s/%s/%s", watchedEvent.getPath(), watchedEvent.getState(), watchedEvent.getType())); if (isLeader()) { if (watchedEvent.getState() == Event.KeeperState.Disconnected) { callback(); } else if (watchedEvent.getState() == Event.KeeperState.SyncConnected) { callback(); } } }
@Test public void testDefaultWatcherAutoResetWithChroot() throws Exception { ZooKeeper zk1 = createClient(); zk1.create("/ch1", null, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); MyWatcher watcher = new MyWatcher(); ZooKeeper zk2 = createClient(watcher, hostPort + "/ch1"); zk2.getChildren("/", true ); // this call shouldn't trigger any error or watch zk1.create("/youdontmatter1", null, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); // this should trigger the watch zk1.create("/ch1/youshouldmatter1", null, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); WatchedEvent e = watcher.events.poll(TIMEOUT, TimeUnit.MILLISECONDS); Assert.assertNotNull(e); Assert.assertEquals(EventType.NodeChildrenChanged, e.getType()); Assert.assertEquals("/", e.getPath()); zk2.getChildren("/", true ); stopServer(); watcher.waitForDisconnected(3000); startServer(); watcher.waitForConnected(3000); // this should trigger the watch zk1.create("/ch1/youshouldmatter2", null, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); e = watcher.events.poll(TIMEOUT, TimeUnit.MILLISECONDS); Assert.assertNotNull(e); Assert.assertEquals(EventType.NodeChildrenChanged, e.getType()); Assert.assertEquals("/", e.getPath()); }
@Override synchronized public void process(WatchedEvent event) { ReplyHeader h = new ReplyHeader(-1, -1L, 0); if (LOG.isTraceEnabled()) { ZooTrace.logTraceMessage(LOG, ZooTrace.EVENT_DELIVERY_TRACE_MASK, "Deliver event " + event + " to 0x" + Long.toHexString(this.sessionId) + " through " + this); } // Convert WatchedEvent to a type that can be sent over the wire WatcherEvent e = event.getWrapper(); sendResponse(h, e, "notification"); }
@Override public void process(WatchedEvent event) { if (event.getType() == EventType.NodeDataChanged) { synchronized(this) { changed = true; notifyAll(); } } }
@Test public void testConvertingToEventWrapper() { WatchedEvent we = new WatchedEvent(EventType.NodeCreated, KeeperState.Expired, "blah"); WatcherEvent wew = we.getWrapper(); Assert.assertEquals(EventType.NodeCreated.getIntValue(), wew.getType()); Assert.assertEquals(KeeperState.Expired.getIntValue(), wew.getState()); Assert.assertEquals("blah", wew.getPath()); }
public void process(WatchedEvent event) { LOG.info("Event:" + event.getState() + " " + event.getType() + " " + event.getPath()); if (event.getState() == KeeperState.SyncConnected && startSignal != null && startSignal.getCount() > 0) { startSignal.countDown(); } }
@Override public void process(WatchedEvent watchedEvent) { EventType eventType = watchedEvent.getType(); switch (eventType) { case NodeDeleted: System.out.println("create"); default: } // TODO: 更新配置 }
@Override public void process(WatchedEvent event) { EventType eventType = event.getType(); try { switch (eventType) { case NodeDataChanged: String znodeData = ZkNodeUtil.getNodeValueAsString(confPath, client, 2); if (nodeType.equals("xml")) { ConfigUtil.writeToProperties(znodeData, StringUtil.nodePathToFile(confPath)); } else if (nodeType.equals("properties")) { ConfigUtil.writeToXML(znodeData, StringUtil.nodePathToFile(confPath)); } else if (nodeType.equals("default")) { ConfigUtil.writeToDefault(znodeData, StringUtil.nodePathToFile(confPath)); } getDefaultLogger().info(this.confPath + " 路径在zookeeper上已经被修改"); break; case NodeDeleted: ConfigUtil.deleteFile(StringUtil.nodePathToFile(confPath)); getDefaultLogger().info(this.confPath + " 路径在zookeeper上已经被删除"); break; default: break; } } catch (Exception e) { e.printStackTrace(); } }
public void process(WatchedEvent event) { if (KeeperState.Expired == event.getState()) { // It's all over LOG.error("Lost session"); System.exit(4); } if (event.getPath() != null && event.getPath().equals(assignmentsNode)) { // children have changed, so read in the new list zk.getChildren(assignmentsNode, true, this, null); } }
@Test public void testCreatingWatchedEventFromInvalidWrapper() { // Make sure we can't convert from an invalid wrapper try { WatcherEvent wep = new WatcherEvent(-2342, -252352, "foo"); WatchedEvent we = new WatchedEvent(wep); Assert.fail("Was able to create WatchedEvent from bad wrapper"); } catch (RuntimeException re) { // we're good } }
@Override protected void processUpdate(WatchedEvent event) { Stat stat = updateZnodeStat(_ExistsWatcher); if (stat != null) { updateZnodeData(stat, null); updateZnodeAcl(stat); } }
@Override protected void processUpdate(WatchedEvent event) { Znode znode = getData(); Stat stat = znode.getStat(); updateZnodeData(stat, _GetDataWatcher); updateZnodeAcl(stat); }
public void process(WatchedEvent event) { super.process(event); if (event.getType() != Event.EventType.None) { timeOfLastWatcherInvocation = System.currentTimeMillis(); try { events.put(event); } catch (InterruptedException e) { LOG.warn("ignoring interrupt during event.put"); } } }
public void process(WatchedEvent event) { System.err.println(event); synchronized (this) { if (event.getType() == EventType.None) { connected = (event.getState() == KeeperState.SyncConnected); notifyAll(); } } }
@Override public synchronized void process(WatchedEvent event) { if (event.getState() == KeeperState.AuthFailed) { authFailed.incrementAndGet(); } else { super.process(event); } }