void queueEvent(String clientPath, int err, Set<Watcher> materializedWatchers, EventType eventType) { KeeperState sessionState = KeeperState.SyncConnected; if (KeeperException.Code.SESSIONEXPIRED.intValue() == err || KeeperException.Code.CONNECTIONLOSS.intValue() == err) { sessionState = Event.KeeperState.Disconnected; } WatchedEvent event = new WatchedEvent(eventType, sessionState, clientPath); eventThread.queueEvent(event, materializedWatchers); }
@Override public void injectSessionExpiration() { LOG.info("injectSessionExpiration() called"); clientCnxn.eventThread.queueEvent(new WatchedEvent( Watcher.Event.EventType.None, Watcher.Event.KeeperState.Expired, null)); clientCnxn.eventThread.queueEventOfDeath(); clientCnxn.state = ZooKeeper.States.CLOSED; clientCnxn.sendThread.getClientCnxnSocket().onClosing(); } }
@Override public WatcherOrBitSet triggerWatch( String path, EventType type, WatcherOrBitSet supress) { WatchedEvent e = new WatchedEvent(type, KeeperState.SyncConnected, path); Set<Watcher> watchers;
@Override public void processResult(CuratorFramework client, CuratorEvent event) throws Exception { WatchedEvent fakeEvent = new WatchedEvent(Watcher.Event.EventType.None, curator.getZookeeperClient().isConnected() ? Watcher.Event.KeeperState.SyncConnected : Watcher.Event.KeeperState.Disconnected, null); watcher.process(fakeEvent); } };
state = States.CLOSED; eventThread.queueEvent(new WatchedEvent( Watcher.Event.EventType.None, Watcher.Event.KeeperState.Expired, null)); KeeperState eventState = (isRO) ? KeeperState.ConnectedReadOnly : KeeperState.SyncConnected; eventThread.queueEvent(new WatchedEvent( Watcher.Event.EventType.None, eventState, null));
@Override public void injectSessionExpiration() { LOG.info("injectSessionExpiration() called"); clientCnxn.eventThread.queueEvent(new WatchedEvent( Watcher.Event.EventType.None, Watcher.Event.KeeperState.Expired, null)); clientCnxn.eventThread.queueEventOfDeath(); clientCnxn.sendThread.getClientCnxnSocket().wakeupCnxn(); clientCnxn.state = ZooKeeper.States.CLOSED; } }
eventThread.queueEvent(new WatchedEvent( Watcher.Event.EventType.None, Watcher.Event.KeeperState.AuthFailed, null));
WatchedEvent e = null; if (node == null) { watcher.process(new WatchedEvent(EventType.NodeDeleted, KeeperState.SyncConnected, path)); } else if (node.stat.getMzxid() > relativeZxid) { watcher.process(new WatchedEvent(EventType.NodeDataChanged, KeeperState.SyncConnected, path)); } else { DataNode node = getNode(path); if (node != null) { watcher.process(new WatchedEvent(EventType.NodeCreated, KeeperState.SyncConnected, path)); } else { DataNode node = getNode(path); if (node == null) { watcher.process(new WatchedEvent(EventType.NodeDeleted, KeeperState.SyncConnected, path)); } else if (node.stat.getPzxid() > relativeZxid) { watcher.process(new WatchedEvent(EventType.NodeChildrenChanged, KeeperState.SyncConnected, path)); } else {
private void cleanAndNotifyState() { cleanup(); if (state.isAlive()) { eventThread.queueEvent(new WatchedEvent(Event.EventType.None, Event.KeeperState.Disconnected, null)); } clientCnxnSocket.updateNow(); clientCnxnSocket.updateLastSendAndHeard(); }
private void startConnect(InetSocketAddress addr) throws IOException { // initializing it for new connection saslLoginFailed = false; state = States.CONNECTING; setName(getName().replaceAll("\\(.*\\)", "(" + addr.getHostName() + ":" + addr.getPort() + ")")); if (ZooKeeperSaslClient.isEnabled()) { try { String principalUserName = System.getProperty( ZK_SASL_CLIENT_USERNAME, "zookeeper"); zooKeeperSaslClient = new ZooKeeperSaslClient( principalUserName+"/"+addr.getHostName()); } catch (LoginException e) { // An authentication error occurred when the SASL client tried to initialize: // for Kerberos this means that the client failed to authenticate with the KDC. // This is different from an authentication error that occurs during communication // with the Zookeeper server, which is handled below. LOG.warn("SASL configuration failed: " + e + " Will continue connection to Zookeeper server without " + "SASL authentication, if Zookeeper server allows it."); eventThread.queueEvent(new WatchedEvent( Watcher.Event.EventType.None, Watcher.Event.KeeperState.AuthFailed, null)); saslLoginFailed = true; } } logStartConnect(addr); clientCnxnSocket.connect(addr); }
@Test public void testCreatingWatchedEvent() { // EventWatch is a simple, immutable type, so all we need to do // is make sure we can create all possible combinations of values. EnumSet<EventType> allTypes = EnumSet.allOf(EventType.class); EnumSet<KeeperState> allStates = EnumSet.allOf(KeeperState.class); WatchedEvent we; for(EventType et : allTypes) { for(KeeperState ks : allStates) { we = new WatchedEvent(et, ks, "blah"); Assert.assertEquals(et, we.getType()); Assert.assertEquals(ks, we.getState()); Assert.assertEquals("blah", we.getPath()); } } }
@Test public void testCreatingWatchedEventFromInvalidWrapper() { // Make sure we can't convert from an invalid wrapper try { WatcherEvent wep = new WatcherEvent(-2342, -252352, "foo"); new WatchedEvent(wep); Assert.fail("Was able to create WatchedEvent from bad wrapper"); } catch (RuntimeException re) { // we're good } }
toNotifyCreate.forEach( watcher -> watcher.process( new WatchedEvent(EventType.NodeCreated, KeeperState.SyncConnected, finalPath))); toNotifyParent.forEach( watcher -> watcher.process( new WatchedEvent(EventType.NodeChildrenChanged, KeeperState.SyncConnected, parent)));
.process(new WatchedEvent(EventType.NodeDataChanged, KeeperState.SyncConnected, path))); });
watcher1.process(new WatchedEvent(EventType.NodeDeleted, KeeperState.SyncConnected, path)); watcher2.process(new WatchedEvent(EventType.NodeChildrenChanged, KeeperState.SyncConnected, parent));
@Override public WatcherOrBitSet triggerWatch( String path, EventType type, WatcherOrBitSet suppress) { WatchedEvent e = new WatchedEvent(type, KeeperState.SyncConnected, path); BitHashSet watchers = remove(path); if (watchers == null) { return null; } // Avoid race condition between dead watcher cleaner in // WatcherCleaner and iterating here synchronized (watchers) { for (Integer wBit : watchers) { if (suppress != null && suppress.contains(wBit)) { continue; } Watcher w = watcherBitIdMap.get(wBit); // skip dead watcher if (w == null || isDeadWatcher(w)) { continue; } w.process(e); } } return new WatcherOrBitSet(watchers); }
@Test public void testCreatingWatchedEventFromWrapper() { // Make sure we can handle any type of correct wrapper EnumSet<EventType> allTypes = EnumSet.allOf(EventType.class); EnumSet<KeeperState> allStates = EnumSet.allOf(KeeperState.class); WatchedEvent we; WatcherEvent wep; for(EventType et : allTypes) { for(KeeperState ks : allStates) { wep = new WatcherEvent(et.getIntValue(), ks.getIntValue(), "blah"); we = new WatchedEvent(wep); Assert.assertEquals(et, we.getType()); Assert.assertEquals(ks, we.getState()); Assert.assertEquals("blah", we.getPath()); } } }
.process(new WatchedEvent(EventType.NodeDeleted, KeeperState.SyncConnected, path))); toNotifyParent.forEach(watcher -> watcher .process(new WatchedEvent(EventType.NodeChildrenChanged, KeeperState.SyncConnected, parent)));
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,
@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()); } }