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:io.seldon.api.state.ZkABTestingUpdater.java

License:Apache License

@Override
public void run() {
    logger.info("Starting");
    try {//from w  w w.ja  v  a  2 s.  c  om
        while (keepRunning) {
            boolean error = false;
            try {

                CuratorFramework client = null;
                boolean ok = false;
                for (int attempts = 0; attempts < 4 && !ok; attempts++) {
                    client = curatorHandler.getCurator().usingNamespace(clientName);
                    logger.info("Waiting until zookeeper connected");
                    ok = client.getZookeeperClient().blockUntilConnectedOrTimedOut();
                    if (ok)
                        logger.info("zookeeper connected on attempt " + attempts);
                    else {
                        logger.error("Timed out waiting for zookeeper connect : attempt " + attempts);
                    }
                }
                if (!ok) {
                    logger.error("Failed to connect to zookeeper after multiple attempts - STOPPING");
                    return;
                }
                queue = new LinkedBlockingQueue<>();
                Watcher watcher = new Watcher() {
                    boolean expired;

                    @Override
                    public void process(WatchedEvent event) {
                        try {
                            if (event.getPath() != null)
                                queue.put(event.getPath());
                            else {
                                logger.warn("Unexpected event " + event.getType().name() + " -> "
                                        + event.toString());
                                switch (event.getState()) {
                                case SyncConnected: {
                                }
                                    break;
                                case Expired: {
                                    queue.put("");
                                }
                                    break;
                                case Disconnected: {
                                }
                                    break;
                                }
                            }
                        } catch (InterruptedException e) {
                            throw new Error(e);
                        }
                    }
                };

                logger.info("Checking path " + DYNAMIC_PARAM_PATH + " exists");
                if (client.checkExists().forPath(DYNAMIC_PARAM_PATH) == null) {
                    logger.warn("Path " + DYNAMIC_PARAM_PATH + " does not exist for client " + clientName
                            + " creating...");
                    client.create().forPath(DYNAMIC_PARAM_PATH);
                }

                logger.info("Checking path " + AB_ALG_PATH + " exists");
                if (client.checkExists().forPath(AB_ALG_PATH) == null) {
                    logger.warn("Path " + AB_ALG_PATH + " does not exist for client " + clientName
                            + " creating...");
                    client.create().forPath(AB_ALG_PATH);
                }

                client.getData().usingWatcher(watcher).forPath(DYNAMIC_PARAM_PATH);
                client.getData().usingWatcher(watcher).forPath(AB_ALG_PATH);

                boolean restart = false;
                while (keepRunning && !restart) {

                    String path = queue.take();
                    if (!StringUtils.isEmpty(path)) {
                        logger.info("Alg Path changed " + path);

                        System.out.println("Alg Path changed " + path);

                        if (path.endsWith(DYNAMIC_PARAM_PATH)) {
                            try {
                                byte[] bytes = client.getData().forPath(DYNAMIC_PARAM_PATH);
                                ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(bytes));
                                DynamicParameterBean bean = (DynamicParameterBean) in.readObject();
                                in.close();
                                logger.info("Updating dynamic parameter: " + bean.getName()
                                        + " and setting to value: " + bean.getValue() + " for client "
                                        + clientName);
                                DynamicParameterServer.setParameterBean(clientName, bean);
                                numUpdates++;
                            } catch (ClassNotFoundException e) {
                                logger.error("Can't find class ", e);
                            } catch (IOException e) {
                                logger.error("Failed to deserialize algorithm for client " + clientName, e);
                            } finally {
                                client.getData().usingWatcher(watcher).forPath(DYNAMIC_PARAM_PATH);
                            }

                        } else if (path.endsWith(AB_ALG_PATH)) {
                            try {
                                byte[] bytes = client.getData().forPath(AB_ALG_PATH);

                                ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(bytes));
                                ABTest abTest = (ABTest) in.readObject();
                                in.close();
                                logger.info("Updating Algorithm percentage for client " + clientName + " to "
                                        + abTest.toString());
                                ABTestingServer.setABTest(clientName, abTest);
                                numUpdates++;
                            } catch (ClassNotFoundException e) {
                                logger.error("Can't find class ", e);
                            } catch (IOException e) {
                                logger.error("Failed to deserialize algorithm for client " + clientName, e);
                            } finally {
                                client.getData().usingWatcher(watcher).forPath(AB_ALG_PATH);
                            }
                        } else {
                            logger.error("Unknown path " + path + " changed so reseting watchers");
                        }
                    } else {
                        //client.getData().usingWatcher(watcher).forPath(DYNAMIC_PARAM_PATH);
                        //client.getData().usingWatcher(watcher).forPath(AB_ALG_PATH);
                        logger.warn("Will try to restart");
                        restart = true;
                    }

                }

            } catch (IOException e) {
                logger.error("Exception trying to create sk client ", e);
                error = true;
            } catch (Exception e) {
                logger.error("Exception from zookeeper client ", e);
                error = true;
            } finally {

            }

            if (keepRunning && error) {
                logger.info("Sleeping " + sleepTime);
                Thread.sleep(sleepTime);
                if (sleepTime * 2 < maxSleepTime)
                    sleepTime = sleepTime * 2;
                error = false;
            }

        }
    } catch (InterruptedException e) {
        logger.warn("Sleep interuppted ", e);
    }
    logger.info("Stopping");
}

From source file:io.seldon.api.state.ZkAlgorithmUpdater.java

License:Apache License

@Override
public void run() {
    logger.info("Starting");
    try {//from   w  w w  . j a  v a 2  s  .  co  m
        boolean error = false;
        while (keepRunning) {
            try {

                CuratorFramework client = null;
                boolean ok = false;
                for (int attempts = 0; attempts < 4 && !ok; attempts++) {
                    client = curatorHandler.getCurator().usingNamespace(clientName);
                    logger.info("Waiting until zookeeper connected on attempt " + attempts);
                    ok = client.getZookeeperClient().blockUntilConnectedOrTimedOut();
                    if (ok)
                        logger.info("zookeeper connected");
                    else {
                        logger.error("Timed out waiting for zookeeper connect : attempt " + attempts);
                    }
                }
                if (!ok) {
                    logger.error("Failed to connect to zookeeper after multiple attempts - STOPPING");
                    return;
                }
                queue = new LinkedBlockingQueue<>();
                final Watcher watcher = new Watcher() {
                    boolean expired = false;

                    @Override
                    public void process(WatchedEvent event) {
                        try {
                            if (event.getPath() != null)
                                queue.put(event.getPath());
                            else {
                                logger.warn("Unexpected event " + event.getType().name() + " -> "
                                        + event.toString());
                                switch (event.getState()) {
                                case SyncConnected: {
                                }
                                    break;
                                case Expired: {
                                    queue.put("");
                                }
                                    break;
                                case Disconnected: {
                                    logger.warn("Disconnected from server");
                                    //queue.put("");                                      
                                }
                                    break;
                                }

                            }
                        } catch (InterruptedException e) {
                            throw new Error(e);
                        }
                    }
                };

                logger.info("Checking path " + ALG_PATH + " exists");
                if (client.checkExists().forPath(ALG_PATH) == null) {
                    logger.warn(
                            "Path " + ALG_PATH + " does not exist for client " + clientName + " creating...");
                    client.create().forPath(ALG_PATH);
                } else
                    logger.info("Path " + ALG_PATH + " exists");

                //client.getConnectionStateListenable().addListener(stateListener);
                boolean restart = false;
                while (keepRunning && !restart) {

                    client.getData().usingWatcher(watcher).forPath(ALG_PATH);

                    String path = queue.take();
                    if (!StringUtils.isEmpty(path)) {
                        logger.info("Alg Path changed " + path);

                        byte[] bytes = client.getData().forPath(ALG_PATH);

                        try {
                            ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(bytes));
                            CFAlgorithm alg = (CFAlgorithm) in.readObject();
                            in.close();
                            //Update Algorithm for client
                            logger.info(
                                    "Updating algorithm options for " + clientName + " to " + alg.toString());
                            Util.getAlgorithmService().setAlgorithmOptions(clientName, alg);
                            numUpdates++;
                        } catch (ClassNotFoundException e) {
                            logger.error("Can't find class ", e);
                        } catch (IOException e) {
                            logger.error("Failed to deserialize algorithm for client " + clientName, e);
                        }
                    } else {
                        //logger.warn("Empty path - maybe zookeeper connection state change watcher will be reset");
                        logger.warn("Will try to restart");
                        restart = true;
                    }
                }

            } catch (IOException e) {
                logger.error("Exception trying to create sk client ", e);
                error = true;
            } catch (Exception e) {
                logger.error("Exception from zookeeper client ", e);
                error = true;
            } finally {

            }

            if (keepRunning && error) {
                logger.info("Sleeping " + sleepTime);
                Thread.sleep(sleepTime);
                if (sleepTime * 2 < maxSleepTime)
                    sleepTime = sleepTime * 2;
                error = false;
            }

        }
    } catch (InterruptedException e) {
        logger.warn("Sleep interuppted ", e);
    }
    logger.info("Stopping");
}

From source file:me.tfeng.play.avro.d2.AvroD2Server.java

License:Apache License

@Override
public void process(WatchedEvent event) {
    if (event.getType() == EventType.NodeDeleted && event.getPath().equals(nodePath)
            || event.getType() == EventType.None && event.getState() == KeeperState.SyncConnected) {
        // If the node is unexpectedly deleted or if ZooKeeper connection is restored, register the
        // server again.
        register();/*www  . ja v  a  2  s.c  o m*/
    }
}

From source file:ml.shifu.guagua.BasicCoordinator.java

License:Apache License

@Override
public void process(final WatchedEvent event) {
    LOG.debug("process: Got a new event, path = {}, type = {}, state = {}", event.getPath(), event.getType(),
            event.getState());/*  ww  w.  ja  v a  2s .  c om*/

    if ((event.getPath() == null) && (event.getType() == EventType.None)) {
        if (event.getState() == KeeperState.SyncConnected) {
            LOG.info("process: Asynchronous connection complete.");
            this.getZkConnLatch().countDown();
        } else {
            LOG.warn("process: Got unknown null path event {}.", event);
        }
        return;
    }
}

From source file:ml.shifu.guagua.master.AsyncMasterCoordinator.java

License:Apache License

@Override
public void process(WatchedEvent event) {
    LOG.debug("DEBUG: process: Got a new event, path = {}, type = {}, state = {}", event.getPath(),
            event.getType(), event.getState());

    if ((event.getPath() == null) && (event.getType() == EventType.None)) {
        if (event.getState() == KeeperState.SyncConnected) {
            LOG.info("process: Asynchronous connection complete.");
            super.getZkConnLatch().countDown();
        } else {/*from   www.j  a va  2  s  . c o  m*/
            LOG.warn("process: Got unknown null path event " + event);
        }
        return;
    }

    /**
     * Check lock signal condition.
     */
    String appWorkerBaseNode = getWorkerBaseNode(getAppId(), getCurrentIteration()).toString();
    if (event.getPath().equals(appWorkerBaseNode) && (event.getType() == EventType.NodeChildrenChanged)) {
        if (getCurrentIteration() == 0) {
            this.workerInitLock.signal();
        } else {
            this.workerIterationLock.signal();
        }
    }
}

From source file:ml.shifu.guagua.worker.AsyncWorkerCoordinator.java

License:Apache License

@Override
public void process(WatchedEvent event) {
    LOG.info("DEBUG: process: Got a new event, path = {}, type = {}, state = {}", event.getPath(),
            event.getType(), event.getState());

    if ((event.getPath() == null) && (event.getType() == EventType.None)) {
        if (event.getState() == KeeperState.SyncConnected) {
            LOG.info("process: Asynchronous connection complete.");
            super.getZkConnLatch().countDown();
        } else {/*  www .  jav a2  s .c om*/
            LOG.warn("process: Got unknown null path event " + event);
        }
        return;
    }

    String appMasterNode = getCurrentMasterNode(getAppId(), getCurrentIteration()).toString();

    if (event.getPath().equals(appMasterNode)
            && (event.getType() == EventType.NodeCreated || event.getType() == EventType.NodeDataChanged)) {
        if (getCurrentIteration() == 0) {
            this.masterInitLock.signal();
        } else {
            this.masterIterationLock.signal();
        }
    }
}

From source file:net.phoenix.thrift.server.ZookeeperRegisterHandler.java

License:Apache License

@Override
public void process(WatchedEvent event) {
    switch (event.getType()) {
    case None://from ww  w .  j av  a2  s  .c  o m
        this.processNoneEvent(event);
        break;
    default:
        log.debug("Ignore event " + event.getPath() + " with type " + event.getType());
    }
}

From source file:net.sf.katta.zk.ZKClient.java

License:Apache License

@Override
public void process(WatchedEvent event) {

    // public void process(final WatcherEvent event) {
    // if (null == event.getPath()) {
    // // prohibit nullpointer (See ZOOKEEPER-77)
    // event.setPath("null");
    // }/* ww w  .j  a v  a  2  s. c  o m*/
    boolean stateChanged = event.getState() == KeeperState.Disconnected
            || event.getState() == KeeperState.Expired;
    boolean dataChanged = event.getType() == Watcher.Event.EventType.NodeDataChanged
            || event.getType() == Watcher.Event.EventType.NodeChildrenChanged
            || event.getType() == Watcher.Event.EventType.NodeDeleted;
    try {
        getEventLock().lock();
        if (_shutdownTriggered) {
            LOG.debug("ignoring event '{" + event.getType() + " | " + event.getPath()
                    + "}' since shutdown triggered");
            return;
        }
        if (event.getState() == KeeperState.Expired) {
            processExpiration(event);
        }
        if (dataChanged) {
            processDataOrChildChange(event);
        }
    } finally {
        if (stateChanged) {
            getEventLock().getStateChangedCondition().signalAll();
        }
        if (dataChanged) {
            getEventLock().getDataChangedCondition().signalAll();
        }
        getEventLock().unlock();
    }
}

From source file:net.sf.katta.zk.ZKClient.java

License:Apache License

private void processDataOrChildChange(WatchedEvent event) {
    // ZkEventType eventType = ZkEventType.getMappedType(event.getType());
    final String path = event.getPath();

    if (event.getType() == Watcher.Event.EventType.NodeChildrenChanged) {
        Set<IZkChildListener> childListeners = _path2ChildListenersMap.get(path);
        if (childListeners != null && !childListeners.isEmpty()) {
            // since resubscribeChildPath might remove listener from listeners
            // because they throw exeception we need to copy the listener first to
            // make sure we also notify listener we could not re subscribe to the
            // given path
            HashSet<IZkChildListener> copiedSet = new HashSet<IZkChildListener>();
            copiedSet.addAll(childListeners);

            List<String> children = resubscribeChildPath(path, childListeners);

            for (final IZkChildListener listener : copiedSet) {
                try {
                    listener.handleChildChange(event.getPath(), children);
                } catch (final Throwable e) {
                    LOG.error("Faild to process event with listener: " + listener, e);
                }//from  w  ww .j a  v a2s .c  o m
            }
        }
    } else {
        Set<IZkDataListener> listeners = _path2DataListenersMap.get(path);
        if (listeners != null && !listeners.isEmpty()) {

            HashSet<IZkDataListener> copiedSet = new HashSet<IZkDataListener>();
            copiedSet.addAll(listeners);
            byte[] data = resubscribeDataPath(path, listeners);

            for (final IZkDataListener listener : copiedSet) {
                try {
                    if (event.getType() == Watcher.Event.EventType.NodeCreated) {
                        listener.handleDataAdded(event.getPath(),
                                readWritable(listener.createWritable(), data));
                    } else if (event.getType() == Watcher.Event.EventType.NodeDataChanged) {
                        listener.handleDataChange(event.getPath(),
                                readWritable(listener.createWritable(), data));
                    } else if (event.getType() == Watcher.Event.EventType.NodeDeleted) {
                        listener.handleDataDeleted(event.getPath());
                    } else {
                        LOG.error("Received a unknown event, ignoring: " + event.getType());
                    }
                } catch (final Throwable e) {
                    LOG.error("Faild to process event " + event.getType() + " with listener: " + listener, e);
                }
            }
        }
    }
}

From source file:org.apache.accumulo.fate.zookeeper.ZooLock.java

License:Apache License

private synchronized void lockAsync(final String myLock, final AsyncLockWatcher lw)
        throws KeeperException, InterruptedException {

    if (asyncLock == null) {
        throw new IllegalStateException("Called lockAsync() when asyncLock == null");
    }/*from  w w  w  . ja v a2 s . c o m*/

    List<String> children = zooKeeper.getChildren(path);

    if (!children.contains(myLock)) {
        throw new RuntimeException("Lock attempt ephemeral node no longer exist " + myLock);
    }

    Collections.sort(children);
    if (log.isTraceEnabled()) {
        log.trace("Candidate lock nodes");
        for (String child : children) {
            log.trace("- " + child);
        }
    }

    if (children.get(0).equals(myLock)) {
        log.trace("First candidate is my lock, acquiring");
        if (!watchingParent) {
            throw new IllegalStateException("Can not acquire lock, no longer watching parent : " + path);
        }
        this.lockWatcher = lw;
        this.lock = myLock;
        asyncLock = null;
        lockWasAcquired = true;
        lw.acquiredLock();
        return;
    }
    String prev = null;
    for (String child : children) {
        if (child.equals(myLock)) {
            break;
        }

        prev = child;
    }

    final String lockToWatch = path + "/" + prev;
    log.trace("Establishing watch on " + lockToWatch);
    Stat stat = zooKeeper.getStatus(lockToWatch, new Watcher() {

        @Override
        public void process(WatchedEvent event) {
            if (log.isTraceEnabled()) {
                log.trace("Processing event:");
                log.trace("- type  " + event.getType());
                log.trace("- path  " + event.getPath());
                log.trace("- state " + event.getState());
            }
            boolean renew = true;
            if (event.getType() == EventType.NodeDeleted && event.getPath().equals(lockToWatch)) {
                log.trace("Detected deletion of " + lockToWatch + ", attempting to acquire lock");
                synchronized (ZooLock.this) {
                    try {
                        if (asyncLock != null) {
                            lockAsync(myLock, lw);
                        } else if (log.isTraceEnabled()) {
                            log.trace("While waiting for another lock " + lockToWatch + " " + myLock
                                    + " was deleted");
                        }
                    } catch (Exception e) {
                        if (lock == null) {
                            // have not acquired lock yet
                            lw.failedToAcquireLock(e);
                        }
                    }
                }
                renew = false;
            }

            if (event.getState() == KeeperState.Expired || event.getState() == KeeperState.Disconnected) {
                synchronized (ZooLock.this) {
                    if (lock == null) {
                        lw.failedToAcquireLock(new Exception("Zookeeper Session expired / disconnected"));
                    }
                }
                renew = false;
            }
            if (renew) {
                log.trace("Renewing watch on " + lockToWatch);
                try {
                    Stat restat = zooKeeper.getStatus(lockToWatch, this);
                    if (restat == null) {
                        lockAsync(myLock, lw);
                    }
                } catch (KeeperException e) {
                    lw.failedToAcquireLock(new Exception("Failed to renew watch on other master node"));
                } catch (InterruptedException e) {
                    lw.failedToAcquireLock(new Exception("Failed to renew watch on other master node"));
                }
            }
        }

    });

    if (stat == null)
        lockAsync(myLock, lw);
}