List of usage examples for org.apache.zookeeper WatchedEvent getState
public KeeperState getState()
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; } }