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.taobao.adfs.zookeeper.ZookeeperClientManager.java

License:Apache License

/**
 * //from   ww w  . j  a  va 2s.co  m
 * if Disconnected or Expired,reconnect ZooKeeper
 * 
 * @param event
 * @throws KeeperException
 * @throws IOException
 * @throws InterruptedException
 * @throws LeaderElectionSetupException
 * @throws MetaCacheInitErrorException
 * @throws SessionExpiredException
 */
private void connectionEvent(WatchedEvent event) {
    switch (event.getState()) {
    case Disconnected:
        logger.warn("Disconnected from ZooKeeper");
        connected = false;
        if (stateWatcherThread != null) {
            stateWatcherThread.interrupt();
        }
        stateWatcherThread = new Thread(new StateWatcher(), "ZkStateWatcher");
        stateWatcherThread.start();
        break;
    case Expired:
        logger.info("ZooKeeper session expired, close current zookeeper's connect, and reconnect zk...");
        connected = false;
        reconnect("");
        break;
    case SyncConnected:
        connected = true;
        if (stateWatcherThread != null) {
            stateWatcherThread.interrupt();
            stateWatcherThread = null;
        }
        logger.info("had connect zk....");
        connectedSignal.countDown();
    }
}

From source file:com.taobao.common.tedis.dislock.ZKClient.java

License:Open Source License

synchronized public void process(WatchedEvent event) {
    KeeperState state = event.getState();
    if (state == KeeperState.SyncConnected) {
        connectedSignal.countDown();/*from   w  w  w.j a  v  a2  s.  c o  m*/
    } else if (state == KeeperState.Expired) {
        logger.warn("- the connect to ZooKeeper session expired ...");
        connect();
    } else if (state == KeeperState.Disconnected) {
        logger.warn("- the zookeeper state is disconnected and it will connect later ...");
    } else {
        logger.warn("- the zookeeper state is " + state);
    }
}

From source file:com.test.sharksharding.use.resource.ZkSetData.java

License:Apache License

public @Test void testSetData() {
    try (BufferedReader reader = new BufferedReader(new FileReader("c:/shark-datasource.xml"))) {
        StringBuffer str = new StringBuffer();
        String value = "";
        while (null != (value = reader.readLine()))
            str.append(value);//from   w w w  . j  av a2s.  co  m
        final CountDownLatch countDownLatch = new CountDownLatch(1);
        ZooKeeper zk_client = new ZooKeeper("ip:port", 30000, new Watcher() {
            @Override
            public void process(WatchedEvent event) {
                final KeeperState STATE = event.getState();
                switch (STATE) {
                case SyncConnected:
                    countDownLatch.countDown();
                    logger.info("connection zookeeper success");
                    break;
                case Disconnected:
                    logger.warn("zookeeper connection is disconnected");
                    break;
                case Expired:
                    logger.error("zookeeper session expired");
                    break;
                case AuthFailed:
                    logger.error("authentication failure");
                default:
                    break;
                }
            }
        });
        countDownLatch.await();
        zk_client.setData("/info/datasource", str.toString().getBytes(), -1);
        logger.info("insert success");
    } catch (Exception e) {
        logger.error("insert fail", e);
    }
}

From source file:com.twitter.common.zookeeper.SingletonServiceTest.java

License:Apache License

@Test
public void testNonLeaderDisconnect() throws Exception {
    CountDownLatch elected = new CountDownLatch(1);
    listener.onLeading(EasyMock.<LeaderControl>anyObject());
    expectLastCall().andAnswer(countDownAnswer(elected));
    listener.onDefeated(null);/*  w w  w.j a  v  a2s.co  m*/
    expectLastCall().anyTimes();

    control.replay();

    ZooKeeperClient zkClient = createZkClient();
    String path = "/fake/path";
    // Create a fake leading candidate node to ensure that the leader in this test is never
    // elected.
    ZooKeeperUtils.ensurePath(zkClient, ZooKeeperUtils.OPEN_ACL_UNSAFE, path);
    String leaderNode = zkClient.get().create(path + "/" + SingletonService.LEADER_ELECT_NODE_PREFIX,
            "fake_leader".getBytes(), ZooKeeperUtils.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL);

    serverSet = new ServerSetImpl(zkClient, path);
    candidate = SingletonService.createSingletonCandidate(zkClient, path, ZooKeeperUtils.OPEN_ACL_UNSAFE);
    DefeatOnDisconnectLeader leader = new DefeatOnDisconnectLeader(zkClient, listener);
    service = new SingletonService(serverSet, candidate);
    service.lead(InetSocketAddress.createUnresolved("foo", PORT_A),
            ImmutableMap.of("http-admin", InetSocketAddress.createUnresolved("foo", PORT_B)), leader);

    final CountDownLatch disconnected = new CountDownLatch(1);
    zkClient.register(new Watcher() {
        @Override
        public void process(WatchedEvent event) {
            if ((event.getType() == EventType.None) && (event.getState() == KeeperState.Disconnected)) {
                disconnected.countDown();
            }
        }
    });

    shutdownNetwork();
    disconnected.await();

    restartNetwork();
    zkClient.get().delete(leaderNode, ZooKeeperUtils.ANY_VERSION);
    // Upon deletion of the fake leader node, the candidate should become leader.
    elected.await();
}

From source file:com.twitter.common.zookeeper.ZooKeeperClient.java

License:Apache License

/**
 * Returns the current active ZK connection or establishes a new one if none has yet been
 * established or a previous connection was disconnected or had its session time out.  This
 * method will attempt to re-use sessions when possible.
 *
 * @param connectionTimeout the maximum amount of time to wait for the connection to the ZK
 *     cluster to be established; 0 to wait forever
 * @return a connected ZooKeeper client/*from   w w  w.ja  va  2  s .co  m*/
 * @throws ZooKeeperConnectionException if there was a problem connecting to the ZK cluster
 * @throws InterruptedException if interrupted while waiting for a connection to be established
 * @throws TimeoutException if a connection could not be established within the configured
 *     session timeout
 */
public synchronized ZooKeeper get(Amount<Long, Time> connectionTimeout)
        throws ZooKeeperConnectionException, InterruptedException, TimeoutException {

    if (zooKeeper == null) {
        final CountDownLatch connected = new CountDownLatch(1);
        Watcher watcher = new Watcher() {
            @Override
            public void process(WatchedEvent event) {
                switch (event.getType()) {
                // Guard the None type since this watch may be used as the default watch on calls by
                // the client outside our control.
                case None:
                    switch (event.getState()) {
                    case Expired:
                        LOG.info("Zookeeper session expired. Event: " + event);
                        close();
                        break;
                    case SyncConnected:
                        connected.countDown();
                        break;
                    }
                }

                eventQueue.offer(event);
            }
        };

        try {
            zooKeeper = (sessionState != null)
                    ? new ZooKeeper(zooKeeperServers, sessionTimeoutMs, watcher, sessionState.sessionId,
                            sessionState.sessionPasswd)
                    : new ZooKeeper(zooKeeperServers, sessionTimeoutMs, watcher);
        } catch (IOException e) {
            throw new ZooKeeperConnectionException("Problem connecting to servers: " + zooKeeperServers, e);
        }

        if (connectionTimeout.getValue() > 0) {
            if (!connected.await(connectionTimeout.as(Time.MILLISECONDS), TimeUnit.MILLISECONDS)) {
                close();
                throw new TimeoutException("Timed out waiting for a ZK connection after " + connectionTimeout);
            }
        } else {
            try {
                connected.await();
            } catch (InterruptedException ex) {
                LOG.info("Interrupted while waiting to connect to zooKeeper");
                close();
                throw ex;
            }
        }
        credentials.authenticate(zooKeeper);

        sessionState = new SessionState(zooKeeper.getSessionId(), zooKeeper.getSessionPasswd());
    }
    return zooKeeper;
}

From source file:com.twitter.common.zookeeper.ZooKeeperClient.java

License:Apache License

/**
 * Clients that need to re-establish state after session expiration can register an
 * {@code onExpired} command to execute.
 *
 * @param onExpired the {@code Command} to register
 * @return the new {@link Watcher} which can later be passed to {@link #unregister} for
 *     removal.//  ww  w .ja  va2  s  .c o m
 */
public Watcher registerExpirationHandler(final Command onExpired) {
    Watcher watcher = new Watcher() {
        @Override
        public void process(WatchedEvent event) {
            if (event.getType() == EventType.None && event.getState() == KeeperState.Expired) {
                onExpired.execute();
            }
        }
    };
    register(watcher);
    return watcher;
}

From source file:com.twitter.distributedlog.acl.ZKAccessControlManager.java

License:Apache License

@Override
public void process(WatchedEvent event) {
    if (Event.EventType.None.equals(event.getType())) {
        if (event.getState() == Event.KeeperState.Expired) {
            refetchAllAccessControlEntries(0);
        }/*w  ww  .ja  v  a  2 s  . co m*/
    } else if (Event.EventType.NodeDataChanged.equals(event.getType())) {
        logger.info("Default ACL for {} is changed, refetching ...", zkRootPath);
        refetchDefaultAccessControlEntry(0);
    } else if (Event.EventType.NodeChildrenChanged.equals(event.getType())) {
        logger.info("List of ACLs for {} are changed, refetching ...", zkRootPath);
        refetchAccessControlEntries(0);
    }
}

From source file:com.twitter.distributedlog.BKLogHandler.java

License:Apache License

@Override
public void process(WatchedEvent event) {
    if (Watcher.Event.EventType.None.equals(event.getType())) {
        if (event.getState() == Watcher.Event.KeeperState.Expired) {
            // if the watcher is expired
            scheduler.schedule(new WatcherGetLedgersCallback(getFullyQualifiedName()),
                    conf.getZKRetryBackoffStartMillis(), TimeUnit.MILLISECONDS);
        }//from   w w  w .  j  av  a  2 s.c  om
    } else if (Watcher.Event.EventType.NodeChildrenChanged.equals(event.getType())) {
        if (LOG.isTraceEnabled()) {
            LOG.trace("LogSegments Changed under {}.", getFullyQualifiedName());
        }
        asyncGetLedgerListWithRetries(LogSegmentMetadata.COMPARATOR, filter, getChildrenWatcher,
                new WatcherGetLedgersCallback(getFullyQualifiedName()));
    }
}

From source file:com.twitter.distributedlog.impl.federated.FederatedZKLogMetadataStore.java

License:Apache License

@Override
public void process(WatchedEvent watchedEvent) {
    if (Event.EventType.None == watchedEvent.getType()
            && Event.KeeperState.Expired == watchedEvent.getState()) {
        scheduleTask(this, conf.getZKSessionTimeoutMilliseconds());
        return;//from  w ww  .j  a  va 2  s.c  o  m
    }
    if (Event.EventType.NodeChildrenChanged == watchedEvent.getType()) {
        // fetch the namespace
        fetchSubNamespaces(this).addEventListener(this);
    }
}

From source file:com.twitter.distributedlog.impl.ZKLogSegmentMetadataStore.java

License:Apache License

/**
 * Process the watched events for registered listeners
 *///from w ww  .j  a  v a 2 s  . c o  m
@Override
public void process(WatchedEvent event) {
    if (Event.EventType.None == event.getType() && Event.KeeperState.Expired == event.getState()) {
        Set<String> keySet = new HashSet<String>(listeners.keySet());
        for (String logSegmentsPath : keySet) {
            scheduleTask(logSegmentsPath, new ReadLogSegmentsTask(logSegmentsPath, this), 0L);
        }
        return;
    }
    String path = event.getPath();
    if (null == path) {
        return;
    }
    switch (event.getType()) {
    case NodeDeleted:
        listeners.remove(path);
        break;
    case NodeChildrenChanged:
        new ReadLogSegmentsTask(path, this).run();
        break;
    default:
        break;
    }
}