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