Example usage for org.apache.zookeeper WatchedEvent getType

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

Introduction

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

Prototype

public EventType getType() 

Source Link

Usage

From source file:com.rapleaf.hank.ZkTestCase.java

License:Apache License

@Override
protected void setUp() throws Exception {
    super.setUp();
    Logger.getLogger("org.apache.zookeeper").setLevel(Level.WARN);

    setupZkServer();//from   w  w  w.  j ava 2  s . c  om

    final Object lock = new Object();
    final AtomicBoolean connected = new AtomicBoolean(false);

    zk = new ZooKeeperPlus("127.0.0.1:" + zkClientPort, 1000000, new Watcher() {
        @Override
        public void process(WatchedEvent event) {
            switch (event.getType()) {
            case None:
                if (event.getState() == KeeperState.SyncConnected) {
                    connected.set(true);
                    synchronized (lock) {
                        lock.notifyAll();
                    }
                }
            }
            LOG.debug(event.toString());
        }
    });

    synchronized (lock) {
        lock.wait(2000);
    }
    if (!connected.get()) {
        fail("timed out waiting for the zk client connection to come online!");
    }
    LOG.debug("session timeout: " + zk.getSessionTimeout());

    zk.deleteNodeRecursively(zkRoot);
    createNodeRecursively(zkRoot);
}

From source file:com.rapleaf.hank.zookeeper.ZooKeeperConnection.java

License:Apache License

/**
 * Listens for notifications from the ZooKeeper service telling that we have
 * been connected, disconnected, or our session has expired.
 * //from w ww . j  a v  a2  s  .  c  o m
 * Upon connection, we first make a call to {@link #onConnect()}, and then we
 * release all threads that are blocking on {@link #waitForConnection()}.
 * 
 * Upon disconnection, we call {@link #onDisconnect()}, and then we reset the
 * latch to block any threads that call {@link #waitForConnection()}.
 * 
 * On session expiry, we call {@link #onSessionExpire()}, reset the latch, and
 * then manually try to reconnect to the ZooKeeper service.
 * 
 * @param event
 */
@Override
public void process(WatchedEvent event) {
    if (event.getType() == Event.EventType.None) {
        KeeperState state = event.getState();
        switch (state) {
        case SyncConnected:
            onConnect();
            connectedSignal.countDown();
            break;
        case Disconnected:
            onDisconnect();
            connectedSignal = new CountDownLatch(1);
            break;
        case Expired:
            onSessionExpire();
            connectedSignal = new CountDownLatch(1);
            try {
                connect(maxConnectAttempts);
            } catch (IOException e) {
                LOG.fatal("Failed to connect to the ZooKeeper service", e);
                throw new RuntimeException("Couldn't connect to the ZooKeeper service", e);
            }
            break;
        }
        // Return because we are done processing this event; do not let subclasses
        // process.
        return;
    }
}

From source file:com.renren.zookeeper.accessor.test.PublishTest.java

License:Open Source License

@BeforeClass
public static void init() throws IOException, KeeperException {
    if (zookeeperBackgroundServer == null) {
        zookeeperBackgroundServer = new ZookeeperBackgroundServer();
        Thread zkBackgroundServer = new Thread(zookeeperBackgroundServer);
        zkBackgroundServer.setDaemon(true);
        zkBackgroundServer.start();//w w w. j a  v  a 2s . c o  m
    }
    config = new ZkConfig();
    final CountDownLatch countDownLatch = new CountDownLatch(1);
    zooKeeper = new ZooKeeper(config.getHost(), config.getSessionTime(), new Watcher() {

        @Override
        public void process(WatchedEvent event) {
            if (event.getType() == EventType.None && event.getState() == KeeperState.SyncConnected) {
                countDownLatch.countDown();
            } else if (event.getType() == EventType.None && event.getState() == KeeperState.Disconnected) {
                System.err.println("The connection between zookeeper server and localhost has down.");
            }
        }
    });
    try {
        countDownLatch.await(10, TimeUnit.SECONDS);
    } catch (InterruptedException e1) {
        System.err.println("Can't connect zookeeper server, please check 2181 port and config file.");
        e1.printStackTrace();
        throw new IOException("Can't connect zookeeper server.");
    }
    try {
        accessor = Accessor.getInstance(config);
        recursiveDelete('/' + PREFIX_STRING);
        try {
            zooKeeper.delete('/' + config.getRoot(), -1);
        } catch (KeeperException.NoNodeException e1) {
            // node not exist, ignore.
        }
        zooKeeper.create('/' + config.getRoot(), null, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
        recursiveCreate('/' + PREFIX_STRING);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

From source file:com.sharksharding.resources.watcher.ZookeeperWatcher.java

License:Apache License

@Override
public void process(WatchedEvent event) {
    if (null == zk_client)
        return;//from www .jav  a 2  s .c  o m
    try {
        Thread.sleep(100);
        /* ? */
        zk_client.exists(nodePath, this);
        EventType eventType = event.getType();
        switch (eventType) {
        case NodeCreated:
            logger.info("create node-->" + event.getPath());
            break;
        case NodeDataChanged:
            final String nodePathValue = new String(zk_client.getData(nodePath, false, null));
            RegisterDataSource.register(nodePathValue, "zookeeper");
            logger.info("change node data-->" + event.getPath());
            break;
        case NodeChildrenChanged:
            break;
        case NodeDeleted:
        default:
            break;
        }
    } catch (Exception e) {
        throw new ConnectionException(e.toString());
    }
}

From source file:com.smartitengineering.cms.spi.lock.impl.distributed.ZKLock.java

License:Open Source License

protected boolean tryRemoteLock(String lockId, final long availableMillisForRemoteLock)
        throws IllegalStateException, InterruptedException {
    final LocalLockRegistrar registrar = config.getRegistrar();
    final ZooKeeper keeper = config.getZooKeeper();
    final String node = getNode();
    if (logger.isDebugEnabled()) {
        logger.debug("Attained local lock " + lockId);
    }/*from   w  ww  .  ja  va  2s.  com*/
    try {
        if (StringUtils.isNotBlank(lockId)) {
            keeper.create(node, org.apache.commons.codec.binary.StringUtils.getBytesUtf8(config.getNodeId()),
                    Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
            keeper.exists(node, this);
            localLockId = lockId;
            return true;
        } else {
            return false;
        }
    } catch (KeeperException ke) {
        if (ke.code() == KeeperException.Code.NODEEXISTS) {
            logger.debug("Lock alrady exists!");
            if (availableMillisForRemoteLock > 0) {
                synchronized (ZKLock.this) {
                    try {
                        keeper.exists(node, new Watcher() {

                            public void process(WatchedEvent event) {
                                if (event.getType().equals(Event.EventType.NodeDeleted)) {
                                    synchronized (ZKLock.this) {
                                        ZKLock.this.notifyAll();
                                    }
                                }
                            }
                        });
                    } catch (Exception ex) {
                        logger.error("Could not attach watcher", ex);
                    }
                    final long remoteStart = System.currentTimeMillis();
                    ZKLock.this.wait(availableMillisForRemoteLock);
                    return tryRemoteLock(lockId,
                            availableMillisForRemoteLock - (System.currentTimeMillis() - remoteStart));
                }
            } else {
                registrar.unlock(key, lockId);
                return false;
            }
        } else {
            logger.error(ke.getMessage(), ke);
            throw new IllegalStateException(ke);
        }
    } catch (Exception ex) {
        registrar.unlock(key, lockId);
        logger.error(ex.getMessage(), ex);
        throw new IllegalStateException(ex);
    }
}

From source file:com.smartitengineering.cms.spi.lock.impl.distributed.ZKLock.java

License:Open Source License

public void process(WatchedEvent event) {
    if (!event.getType().equals(Event.EventType.NodeDeleted)) {
        logger.warn("Remote lock changed unexpectedly! This may cause system inconsistency");
    }/*from   w  ww  .  ja va2s  .  com*/
}

From source file:com.sonian.elasticsearch.zookeeper.client.ZooKeeperClientService.java

License:Apache License

@Override
public Set<String> listNodes(final String path, final NodeListChangedListener nodeListChangedListener)
        throws InterruptedException {
    if (!lifecycle.started()) {
        throw new ZooKeeperClientException("listNodes is called after service was stopped");
    }/*from   w ww.ja v a 2  s . c  o m*/
    Set<String> res = new HashSet<String>();
    final Watcher watcher = (nodeListChangedListener != null) ? new Watcher() {
        @Override
        public void process(WatchedEvent event) {
            if (event.getType() == Watcher.Event.EventType.NodeChildrenChanged) {
                nodeListChangedListener.onNodeListChanged();
            }
        }
    } : null;
    try {

        List<String> children = zooKeeperCall("Cannot list nodes", new Callable<List<String>>() {
            @Override
            public List<String> call() throws Exception {
                return zooKeeper.getChildren(path, watcher);
            }
        });

        if (children == null) {
            return null;
        }
        for (String childPath : children) {
            res.add(extractLastPart(childPath));
        }
        return res;
    } catch (KeeperException e) {
        throw new ZooKeeperClientException("Cannot list nodes", e);
    }
}

From source file:com.sonian.elasticsearch.zookeeper.client.ZooKeeperClientService.java

License:Apache License

private Watcher wrapNodeListener(final NodeListener nodeListener) {
    if (nodeListener != null) {
        return new Watcher() {
            @Override//from  w  w  w  . j  a  v a  2  s  . c  o  m
            public void process(WatchedEvent event) {
                switch (event.getType()) {
                case NodeCreated:
                    nodeListener.onNodeCreated(event.getPath());
                    break;
                case NodeDeleted:
                    nodeListener.onNodeDeleted(event.getPath());
                    break;
                case NodeDataChanged:
                    nodeListener.onNodeDataChanged(event.getPath());
                    break;
                }
            }
        };
    } else {
        return null;
    }
}

From source file:com.splicemachine.ddl.ZooKeeperDDLWatchChecker.java

License:Apache License

@Override
public boolean initialize(final CommunicationListener changeIdListener) throws IOException {

    this.id = zkClient.registerThisServer();
    if (id == null)
        return false; //not a server, so inform the world
    if (id.startsWith("/"))
        id = id.substring(1); //strip the leading / to make sure that we register properly
    changeIdWatcher = new Watcher() {
        @Override//from  ww w . ja v  a  2s.c  o  m
        public void process(WatchedEvent watchedEvent) {
            if (watchedEvent.getType().equals(Event.EventType.NodeChildrenChanged)) {
                if (LOG.isTraceEnabled())
                    LOG.trace("Received watch event, signalling refresh");
                changeIdListener.onCommunicationEvent(watchedEvent.getPath());
            }
        }
    };

    return true;
}

From source file:com.takin.rpc.zkclient.ZkClient.java

License:Apache License

public void process(WatchedEvent event) {
    logger.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();/*from   w w w  . ja va 2 s  . co  m*/
    try {

        // We might have to install child change event listener if a new node was created
        if (getShutdownTrigger()) {
            logger.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
            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();
        logger.debug("Leaving process event");
    }
}