Example usage for org.apache.zookeeper WatchedEvent getPath

List of usage examples for org.apache.zookeeper WatchedEvent getPath

Introduction

In this page you can find the example usage for org.apache.zookeeper WatchedEvent getPath.

Prototype

public String getPath() 

Source Link

Usage

From source file:com.alibaba.jstorm.zk.Zookeeper.java

License:Apache License

/**
 * connect ZK, register Watch/unhandle Watch
 * //  w  w  w  . j  a  v  a2s  .co m
 * @return
 */
public CuratorFramework mkClient(Map conf, List<String> servers, Object port, String root,
        final WatcherCallBack watcher) {

    CuratorFramework fk = Utils.newCurator(conf, servers, port, root);

    fk.getCuratorListenable().addListener(new CuratorListener() {
        @Override
        public void eventReceived(CuratorFramework _fk, CuratorEvent e) throws Exception {
            if (e.getType().equals(CuratorEventType.WATCHED)) {
                WatchedEvent event = e.getWatchedEvent();

                watcher.execute(event.getState(), event.getType(), event.getPath());
            }

        }
    });

    fk.getUnhandledErrorListenable().addListener(new UnhandledErrorListener() {
        @Override
        public void unhandledError(String msg, Throwable error) {
            String errmsg = "Unrecoverable Zookeeper error, halting process: " + msg;
            LOG.error(errmsg, error);
            JStormUtils.halt_process(1, "Unrecoverable Zookeeper error");

        }
    });
    fk.start();
    return fk;
}

From source file:com.alibaba.otter.shared.common.utils.zookeeper.ZkClientx.java

License:Apache License

public void process(WatchedEvent event) {
    LOG.debug("Received event: " + event);
    _zookeeperEventThread = Thread.currentThread();

    boolean stateChanged = event.getPath() == null;
    boolean znodeChanged = event.getPath() != null;
    boolean dataChanged = event.getType() == EventType.NodeDataChanged
            || event.getType() == EventType.NodeDeleted || event.getType() == EventType.NodeCreated
            || event.getType() == EventType.NodeChildrenChanged;

    getEventLock().lock();//  ww w . j  a v  a 2  s  .c  om
    try {

        // We might have to install child change event listener if a new node was created
        if (getShutdownTrigger()) {
            LOG.debug("ignoring event '{" + event.getType() + " | " + event.getPath()
                    + "}' since shutdown triggered");
            return;
        }
        if (stateChanged) {
            processStateChanged(event);
        }
        if (dataChanged) {
            processDataOrChildChange(event);
        }
    } finally {
        if (stateChanged) {
            getEventLock().getStateChangedCondition().signalAll();

            // If the session expired we have to signal all conditions, because watches might have been removed and
            // there is no guarantee that those
            // conditions will be signaled at all after an Expired event
            // TODO PVo write a test for this
            if (event.getState() == KeeperState.Expired) {
                getEventLock().getZNodeEventCondition().signalAll();
                getEventLock().getDataChangedCondition().signalAll();
                // We also have to notify all listeners that something might have changed
                fireAllEvents();
            }
        }
        if (znodeChanged) {
            getEventLock().getZNodeEventCondition().signalAll();
        }
        if (dataChanged) {
            getEventLock().getDataChangedCondition().signalAll();
        }
        getEventLock().unlock();
        LOG.debug("Leaving process event");
    }
}

From source file:com.alibaba.otter.shared.common.utils.zookeeper.ZkClientx.java

License:Apache License

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);
        }//from  www .ja va  2  s. c o  m
    }

    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);
        }
    }
}

From source file:com.alibaba.wasp.zookeeper.ZooKeeperWatcher.java

License:Apache License

/**
 * Method called from ZooKeeper for events and connection status.
 * <p>/*from   ww  w  .  ja  va2s. c om*/
 * Valid events are passed along to listeners. Connection status changes are
 * dealt with locally.
 */
@Override
public void process(WatchedEvent event) {
    LOG.debug(prefix("Received ZooKeeper Event, " + "type=" + event.getType() + ", " + "state="
            + event.getState() + ", " + "path=" + event.getPath()));

    switch (event.getType()) {

    // If event type is NONE, this is a connection status change
    case None: {
        connectionEvent(event);
        break;
    }

    // Otherwise pass along to the listeners

    case NodeCreated: {
        for (ZooKeeperListener listener : listeners) {
            listener.nodeCreated(event.getPath());
        }
        break;
    }

    case NodeDeleted: {
        for (ZooKeeperListener listener : listeners) {
            listener.nodeDeleted(event.getPath());
        }
        break;
    }

    case NodeDataChanged: {
        for (ZooKeeperListener listener : listeners) {
            listener.nodeDataChanged(event.getPath());
        }
        break;
    }

    case NodeChildrenChanged: {
        for (ZooKeeperListener listener : listeners) {
            listener.nodeChildrenChanged(event.getPath());
        }
        break;
    }
    }
}

From source file:com.amazonaws.services.kinesis.stormspout.state.zookeeper.ZookeeperStateManager.java

License:Open Source License

@Override
public synchronized void process(WatchedEvent event) {
    checkState(active, "Cannot process events if state is not active (a ZK" + " connection is necessary).");

    // Re-hook the watcher.
    // Ordering the statements this way will ensure that no ZK shardList update is missed.
    // Since bootstrapStateFromZookeeper does its own getShardList(null) call, and the
    // call is after the re-hook, then any modification made in between the time the process()
    // function is called and the re-hook is made is captured by bootstrapStateFromZookeeper.
    // Note that this could end up in multiple calls being made for the same shardList update.
    try {/*from ww w.  j ava2 s  .  co  m*/
        zk.watchShardList(this);
    } catch (Exception e) {
        // Failure is fatal for the task (and it's been retried, so it's indicative of a
        // bigger Zookeeper/global state issue).
        LOG.error(this + " failure to re-attach event handler for ZK node " + event.getPath(), e);
        throw new KinesisSpoutException(e);
    }

    // If we are handling a shardList modification, then most probably another task handled
    // a reshard, and we need to sync with the state in ZK.
    if (event.getType() == EventType.NodeDataChanged && zk.isShardList(event.getPath())) {
        LOG.info(this + " detected change in shardList. Committing current shard state and "
                + "reinitializing spout task from ZK.");

        commitShardStates();
        bootstrapStateFromZookeeper();
    }
}

From source file:com.anteam.demo.zookeeper.DataMonitor.java

License:Apache License

@SuppressWarnings("deprecation")
public void process(WatchedEvent event) {
    System.out.println("----------------------------------------");
    System.out.println("event:" + event);
    String path = event.getPath();
    System.out.println("DataMonitor.process.path:" + path);
    if (event.getType() == Event.EventType.None) {
        // We are are being told that the state of the
        // connection has changed
        switch (event.getState()) {
        case SyncConnected:
            // In this particular example we don't need to do anything
            // here - watches are automatically re-registered with
            // server and any watches triggered while the client was
            // disconnected will be delivered (in order of course)
            break;
        case Expired:
            // It's all over
            dead = true;/*  w ww .  jav a2  s.c om*/
            listener.closing(KeeperException.Code.SessionExpired);
            break;
        default:
            break;
        }
    } else {
        if (path != null && path.equals(znode)) {
            // Something has changed on the node, let's find out
            zk.exists(znode, true, this, null);
        }
    }
    if (chainedWatcher != null) {
        chainedWatcher.process(event);
    }
}

From source file:com.api6.zkclient.watcher.ZKWatcher.java

License:Apache License

/**
 * ?//from www .j a  v a  2 s.  co m
 * @see org.apache.zookeeper.Watcher#process(org.apache.zookeeper.WatchedEvent)
 */
@Override
public void process(WatchedEvent event) {
    LOG.debug("ZooKeeper event is arrived [" + event + " ]...");
    EventType eventType = event.getType();
    //?
    boolean stateChanged = event.getPath() == null;
    //
    boolean znodeChanged = event.getPath() != null;

    //???
    boolean nodeChanged = eventType == EventType.NodeDataChanged || eventType == EventType.NodeDeleted
            || eventType == EventType.NodeCreated;

    //???????????
    boolean childChanged = eventType == EventType.NodeDeleted || eventType == EventType.NodeCreated
            || eventType == EventType.NodeChildrenChanged;

    client.acquireEventLock();
    try {
        if (client.getShutdownTrigger()) {
            LOG.debug("client will shutdown,ignore the event [" + eventType + " | " + event.getPath() + "]");
            return;
        }
        if (stateChanged) {//ZooKeeper???
            process.processStateChanged(event);
        }
        if (nodeChanged) {//??????
            process.processNodeChanged(event);
        }
        if (childChanged) {//??????????
            process.processChildChanged(event);
        }
    } finally {
        if (stateChanged) {
            client.getEventLock().getStateChangedCondition().signalAll();
            // ????watch.
            // ????????
            // ????
            if (event.getState() == KeeperState.Expired) {
                client.getEventLock().getNodeEventCondition().signalAll();
                client.getEventLock().getNodeOrChildChangedCondition().signalAll();

                // ????
                process.processAllNodeAndChildListeners(event);
            }
        }
        if (znodeChanged) {
            client.getEventLock().getNodeEventCondition().signalAll();
        }
        if (nodeChanged || childChanged) {
            client.getEventLock().getNodeOrChildChangedCondition().signalAll();
        }
        client.releaseEventLock();
    }
}

From source file:com.api6.zkclient.watcher.ZKWatcherProcess.java

License:Apache License

/**
 * ???//  w  w w  . j  a  v a 2 s . co  m
 * @param event 
 * @return void
 */
public void processChildChanged(final WatchedEvent event) {
    final String path = event.getPath();
    final Set<ZKListener> listeners = client.getChildListenerMap().get(path);
    //????
    submitChildEvent(listeners, path, event.getType());
}

From source file:com.api6.zkclient.watcher.ZKWatcherProcess.java

License:Apache License

/**
 * ???// w  ww. ja  v  a  2 s  . co m
 * @param event 
 * @return void
 */
public void processNodeChanged(final WatchedEvent event) {
    final String path = event.getPath();
    final EventType eventType = event.getType();
    final Set<ZKListener> listeners = client.getNodeListenerMap().get(path);
    if (listeners == null || listeners.isEmpty()) {
        return;
    }

    //listenersZKChildDataListener?
    //??????
    //????ZKChildDataListener
    final Set<ZKListener> childDataChangeListners = new CopyOnWriteArraySet<>();
    final Set<ZKListener> nodeListners = new CopyOnWriteArraySet<>();

    classifyListeners(listeners, nodeListners, childDataChangeListners);

    //????
    submitNodeEvent(nodeListners, childDataChangeListners, path, eventType);

    //????
    if (eventType == EventType.NodeDataChanged) {
        //????
        submitChildDataEvent(childDataChangeListners, path, eventType);
    }
}

From source file:com.att.nsa.zkUtils.ZkWatcher.java

License:Open Source License

public static Watcher getLoggingWatcher(final String title, final Logger log) {
    return new Watcher() {
        @Override//from   w  w  w  . j  a  v a  2s . co  m
        public void process(WatchedEvent event) {
            log.info("ZK watch for " + title + ": " + event.getType() + " @ " + event.getPath());
        }
    };
}