Example usage for org.apache.zookeeper WatchedEvent getState

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

Introduction

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

Prototype

public KeeperState getState() 

Source Link

Usage

From source file:com.netflix.curator.BasicTests.java

License:Apache License

@Test
public void testExpiredSession() throws Exception {
    // see http://wiki.apache.org/hadoop/ZooKeeper/FAQ#A4

    final Timing timing = new Timing();

    final CountDownLatch latch = new CountDownLatch(1);
    Watcher watcher = new Watcher() {
        @Override/*w w w .  j av a2 s . c  om*/
        public void process(WatchedEvent event) {
            if (event.getState() == Event.KeeperState.Expired) {
                latch.countDown();
            }
        }
    };

    final CuratorZookeeperClient client = new CuratorZookeeperClient(server.getConnectString(),
            timing.session(), timing.connection(), watcher, new RetryOneTime(2));
    client.start();
    try {
        final AtomicBoolean firstTime = new AtomicBoolean(true);
        RetryLoop.callWithRetry(client, new Callable<Object>() {
            @Override
            public Object call() throws Exception {
                if (firstTime.compareAndSet(true, false)) {
                    try {
                        client.getZooKeeper().create("/foo", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE,
                                CreateMode.PERSISTENT);
                    } catch (KeeperException.NodeExistsException ignore) {
                        // ignore
                    }

                    KillSession.kill(client.getZooKeeper(), server.getConnectString());

                    Assert.assertTrue(timing.awaitLatch(latch));
                }
                ZooKeeper zooKeeper = client.getZooKeeper();
                client.blockUntilConnectedOrTimedOut();
                Assert.assertNotNull(zooKeeper.exists("/foo", false));
                return null;
            }
        });
    } finally {
        client.close();
    }
}

From source file:com.netflix.curator.ConnectionState.java

License:Apache License

@Override
public void process(WatchedEvent event) {
    if (LOG_EVENTS) {
        log.debug("ConnectState watcher: " + event);
    }/*w w w.  ja va2  s. c o m*/

    for (Watcher parentWatcher : parentWatchers) {
        TimeTrace timeTrace = new TimeTrace("connection-state-parent-process", tracer.get());
        parentWatcher.process(event);
        timeTrace.commit();
    }

    boolean wasConnected = isConnected.get();
    boolean newIsConnected = wasConnected;
    if (event.getType() == Watcher.Event.EventType.None) {
        newIsConnected = checkState(event.getState(), wasConnected);
    }

    if (newIsConnected != wasConnected) {
        isConnected.set(newIsConnected);
        connectionStartMs = System.currentTimeMillis();
    }
}

From source file:com.netflix.curator.framework.imps.CuratorFrameworkImpl.java

License:Apache License

public CuratorFrameworkImpl(CuratorFrameworkFactory.Builder builder) {
    this.client = new CuratorZookeeperClient(builder.getZookeeperFactory(), builder.getEnsembleProvider(),
            builder.getSessionTimeoutMs(), builder.getConnectionTimeoutMs(), new Watcher() {
                @Override// ww w .j av  a  2 s  .co m
                public void process(WatchedEvent watchedEvent) {
                    CuratorEvent event = new CuratorEventImpl(CuratorFrameworkImpl.this,
                            CuratorEventType.WATCHED, watchedEvent.getState().getIntValue(),
                            unfixForNamespace(watchedEvent.getPath()), null, null, null, null, null,
                            watchedEvent, null);
                    processEvent(event);
                }
            }, builder.getRetryPolicy());

    listeners = new ListenerContainer<CuratorListener>();
    unhandledErrorListeners = new ListenerContainer<UnhandledErrorListener>();
    backgroundOperations = new DelayQueue<OperationAndData<?>>();
    namespace = new NamespaceImpl(this, builder.getNamespace());
    threadFactory = getThreadFactory(builder);
    connectionStateManager = new ConnectionStateManager(this, builder.getThreadFactory());
    compressionProvider = builder.getCompressionProvider();
    aclProvider = builder.getAclProvider();
    namespaceFacadeCache = new NamespaceFacadeCache(this);

    byte[] builderDefaultData = builder.getDefaultData();
    defaultData = (builderDefaultData != null) ? Arrays.copyOf(builderDefaultData, builderDefaultData.length)
            : new byte[0];

    if (builder.getAuthScheme() != null) {
        authInfo.set(new AuthInfo(builder.getAuthScheme(), builder.getAuthValue()));
    }

    failedDeleteManager = new FailedDeleteManager(this);
}

From source file:com.netflix.curator.framework.imps.NamespaceWatchedEvent.java

License:Apache License

NamespaceWatchedEvent(CuratorFrameworkImpl client, WatchedEvent event) {
    super(event.getType(), event.getState(), client.unfixForNamespace(event.getPath()));
}

From source file:com.netflix.curator.framework.imps.TestFrameworkEdges.java

License:Apache License

@Test
public void testSessionKilled() throws Exception {
    CuratorFramework client = CuratorFrameworkFactory.newClient(server.getConnectString(), new RetryOneTime(1));
    client.start();// w  w w .j a v  a 2s. c  o m
    try {
        client.create().forPath("/sessionTest");

        final AtomicBoolean sessionDied = new AtomicBoolean(false);
        Watcher watcher = new Watcher() {
            @Override
            public void process(WatchedEvent event) {
                if (event.getState() == Event.KeeperState.Expired) {
                    sessionDied.set(true);
                }
            }
        };
        client.checkExists().usingWatcher(watcher).forPath("/sessionTest");
        KillSession.kill(client.getZookeeperClient().getZooKeeper(), server.getConnectString());
        Assert.assertNotNull(client.checkExists().forPath("/sessionTest"));
        Assert.assertTrue(sessionDied.get());
    } finally {
        client.close();
    }
}

From source file:com.netflix.curator.test.KillSession.java

License:Apache License

/**
 * Kill the given ZK session//  w w w.  j a  v a 2s .  co m
 *
 * @param client the client to kill
 * @param connectString server connection string
 * @param maxMs max time ms to wait for kill
 * @throws Exception errors
 */
public static void kill(ZooKeeper client, String connectString, int maxMs) throws Exception {
    long startTicks = System.currentTimeMillis();

    final CountDownLatch sessionLostLatch = new CountDownLatch(1);
    Watcher sessionLostWatch = new Watcher() {
        @Override
        public void process(WatchedEvent event) {
            sessionLostLatch.countDown();
        }
    };
    client.exists("/___CURATOR_KILL_SESSION___" + System.nanoTime(), sessionLostWatch);

    final CountDownLatch connectionLatch = new CountDownLatch(1);
    Watcher connectionWatcher = new Watcher() {
        @Override
        public void process(WatchedEvent event) {
            if (event.getState() == Event.KeeperState.SyncConnected) {
                connectionLatch.countDown();
            }
        }
    };
    ZooKeeper zk = new ZooKeeper(connectString, maxMs, connectionWatcher, client.getSessionId(),
            client.getSessionPasswd());
    try {
        if (!connectionLatch.await(maxMs, TimeUnit.MILLISECONDS)) {
            throw new Exception("KillSession could not establish duplicate session");
        }
        try {
            zk.close();
        } finally {
            zk = null;
        }

        while (client.getState().isConnected() && !sessionLostLatch.await(100, TimeUnit.MILLISECONDS)) {
            long elapsed = System.currentTimeMillis() - startTicks;
            if (elapsed > maxMs) {
                throw new Exception("KillSession timed out waiting for session to expire");
            }
        }
    } finally {
        if (zk != null) {
            zk.close();
        }
    }
}

From source file:com.ngdata.hbaseindexer.indexer.IndexerIT.java

License:Apache License

private void cleanZooKeeper(String zkConnectString, String rootToDelete) throws Exception {
    int sessionTimeout = 10000;

    ZooKeeper zk = new ZooKeeper(zkConnectString, sessionTimeout, new Watcher() {
        @Override//w w  w  . j a  va 2s.c  o  m
        public void process(WatchedEvent event) {
            if (event.getState() == Watcher.Event.KeeperState.Disconnected) {
                System.err.println("ZooKeeper Disconnected.");
            } else if (event.getState() == Event.KeeperState.Expired) {
                System.err.println("ZooKeeper session expired.");
            }
        }
    });

    long waitUntil = System.currentTimeMillis() + sessionTimeout;
    while (zk.getState() != CONNECTED && waitUntil > System.currentTimeMillis()) {
        try {
            Thread.sleep(20);
        } catch (InterruptedException e) {
            break;
        }
    }

    if (zk.getState() != CONNECTED) {
        throw new RuntimeException("Failed to connect to ZK within " + sessionTimeout + "ms.");
    }

    if (zk.exists(rootToDelete, false) != null) {
        List<String> paths = new ArrayList<String>();
        collectChildren(rootToDelete, zk, paths);
        paths.add(rootToDelete);

        for (String path : paths) {
            zk.delete(path, -1, null, null);
        }

        // The above deletes are async, wait for them to be finished
        long startWait = System.currentTimeMillis();
        while (zk.exists(rootToDelete, null) != null) {
            Thread.sleep(5);

            if (System.currentTimeMillis() - startWait > 120000) {
                throw new RuntimeException("State was not cleared in ZK within the expected timeout");
            }
        }
    }

    zk.close();
}

From source file:com.ngdata.sep.util.zookeeper.ZooKeeperImpl.java

License:Apache License

protected void setConnectedState(WatchedEvent event) {
    if (event.getState() == Watcher.Event.KeeperState.SyncConnected) {
        synchronized (connectedMonitor) {
            if (!connected) {
                connected = true;/* w  w w.  ja v a2 s.  c o m*/
                connectedMonitor.notifyAll();
            }
        }
    } else if (event.getState() == Watcher.Event.KeeperState.Disconnected
            || event.getState() == Watcher.Event.KeeperState.Expired) {
        synchronized (connectedMonitor) {
            if (connected) {
                connected = false;
                connectedMonitor.notifyAll();
            }
        }
    }
}

From source file:com.objectdriven.maven.zookeeper.sample.DataMonitor.java

public void process(WatchedEvent event) {
    String path = event.getPath();
    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;//from w w w . j a v a 2s.  c  om
            listener.closing(KeeperException.Code.SessionExpired);
            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.oneapm.base.tools.ZookeeperClient.java

/**
 * ??,?//w w  w.  j av  a2  s. co m
 *
 * @param event
 */
@Override
public void process(WatchedEvent event) {
    LOG.info("" + event.getState());
    if (event.getType() == Event.EventType.NodeDataChanged && event.getPath().equals("/ni/caution")) {
        setRules(event.getPath());
    }
    if (event.getType() == Event.EventType.NodeDataChanged && event.getPath().equals("/ni/license")) {
        setLicense(event.getPath());
    }
}