List of usage examples for org.apache.zookeeper WatchedEvent getPath
public String getPath()
From source file:io.reign.ObserverManager.java
License:Apache License
void scheduleCheck(final WatchedEvent event) { final String path = event.getPath(); // do not schedule a check if we have scheduled a check recently synchronized (observerScheduledCheckTimestampMap) { Long scheduledCheckTimestamp = observerScheduledCheckTimestampMap.get(path); if (scheduledCheckTimestamp != null) { long timeToCheck = scheduledCheckTimestamp - System.currentTimeMillis(); if (timeToCheck > this.sweeperIntervalMillis / 2) { logger.trace(//from www . j a va 2 s. c om "Ignoring: re-check already scheduled: path={}; eventType={}; timeToCheckMillis={}", event.getPath(), event.getType(), timeToCheck); return; } } // update scheduled timestamp observerScheduledCheckTimestampMap.put(path, System.currentTimeMillis() + sweeperIntervalMillis); } logger.debug("Scheduling re-check after watch triggered: path={}; eventType={}; timeToCheckMillis={}", event.getPath(), event.getType(), sweeperIntervalMillis); this.scheduledExecutorService.schedule(new Runnable() { @Override public void run() { try { // sync data to get most recent zkClientUtil.syncPath(zkClient, path, this); // fetch info about node Stat zkStat = zkClient.exists(path, true); Stat updatedStat = new Stat(); byte[] zkData = zkClient.getData(path, true, updatedStat); List<String> zkChildList = zkClient.getChildren(path, true); Set<T> observerSet = getObserverSet(path, false); for (T observer : observerSet) { List<String> observerChildList = observer.getChildList(); byte[] observerData = observer.getData(); if (zkStat != null) { // check children if (childListsDiffer(observerChildList, zkChildList)) { observer.setChildList(zkChildList); updateObserver(path, observer); logger.warn("RECHECK: NODE CHILDREN CHANGED: updated={}; previous={}", zkChildList, observerChildList); observer.nodeChildrenChanged(zkChildList, observerChildList); } // check data if (!Arrays.equals(observerData, zkData)) { observer.setData(zkData); updateObserver(path, observer); logger.warn("RECHECK: NODE DATA CHANGED: updated={}; previous={}", zkData, observerData); observer.nodeDataChanged(zkData, observerData); observer.nodeDataChanged(zkData, observerData, updatedStat); } } else { // node deleted observer.setData(null); observer.setChildList(Collections.EMPTY_LIST); observer.nodeDeleted(observerData, observerChildList); } } } catch (Exception e) { logger.warn("Unable to check event: path=" + path, e); } } }, this.sweeperIntervalMillis, TimeUnit.MILLISECONDS); }
From source file:io.reign.ObserverManager.java
License:Apache License
@Override public boolean filterWatchedEvent(WatchedEvent event) { if (event.getPath() != null && this.getObserverSet(event.getPath(), false).size() == 0) { // ignore events that are not being tracked by an observer return true; }//from w w w . j a va2s . co m return false; }
From source file:io.reign.ObserverManager.java
License:Apache License
@Override public void nodeChildrenChanged(final WatchedEvent event) { delegatorExecutorService.submit(new Runnable() { public void run() { String path = event.getPath(); logger.debug("Notifying ALL observers: nodeChildrenChanged: path={}", path); try { Set<T> observerSet = getObserverSet(path, false); if (observerSet.size() > 0) { List<String> updatedChildList = null; try { updatedChildList = zkClient.getChildren(path, true); } catch (KeeperException e) { if (e.code() != KeeperException.Code.NONODE) { throw e; }//ww w .jav a 2s .com } if (updatedChildList == null) { updatedChildList = Collections.EMPTY_LIST; } for (final T observer : observerSet) { logger.trace("Notifying observer: observer.hashCode()={}", observer.hashCode()); synchronized (observer) { final List<String> previousChildList = observer.getChildList(); boolean updatedValueDiffers = childListsDiffer(updatedChildList, previousChildList); observer.setChildList(updatedChildList); updateObserver(path, observer); if (updatedValueDiffers) { observer.nodeChildrenChanged(updatedChildList, previousChildList); } } } // for scheduleCheck(event); } // if observerSet > 0 } catch (KeeperException e) { logger.warn("Unable to notify observers: path=" + path, e); } catch (Exception e) { logger.warn("Unable to notify observers: path=" + path, e); } } }); }
From source file:io.reign.ObserverManager.java
License:Apache License
@Override public void nodeCreated(final WatchedEvent event) { delegatorExecutorService.submit(new Runnable() { public void run() { String path = event.getPath(); logger.debug("Notifying ALL observers: nodeCreated: path={}", path); try { Set<T> observerSet = getObserverSet(path, false); if (observerSet.size() > 0) { // get children just to get a child watch List<String> childList = zkClient.getChildren(path, true); Stat updatedStat = new Stat(); byte[] data = zkClient.getData(path, true, updatedStat); for (T observer : observerSet) { logger.trace("Notifying observer: observer.hashCode()={}", observer.hashCode()); synchronized (observer) { byte[] previousData = observer.getData(); List<String> previousChildList = observer.getChildList(); observer.setData(data); observer.setChildList(childList); updateObserver(path, observer); if (previousData == null && previousChildList == Collections.EMPTY_LIST) { observer.nodeCreated(data, childList); observer.nodeCreated(data, childList, updatedStat); }/* w ww .jav a2 s . c om*/ } } scheduleCheck(event); } } catch (KeeperException e) { logger.warn("Unable to notify observers: path=" + path, e); } catch (Exception e) { logger.warn("Unable to notify observers: path=" + path, e); } } }); }
From source file:io.reign.ObserverManager.java
License:Apache License
@Override public void nodeDataChanged(final WatchedEvent event) { delegatorExecutorService.submit(new Runnable() { public void run() { String path = event.getPath(); logger.debug("Notifying ALL observers: nodeDataChanged: path={}", path); try { Set<T> observerSet = getObserverSet(path, false); if (observerSet.size() > 0) { Stat updatedStat = new Stat(); byte[] updatedData = zkClient.getData(path, true, updatedStat); for (T observer : observerSet) { logger.trace("Notifying observer: observer.hashCode()={}", observer.hashCode()); synchronized (observer) { if (!Arrays.equals(observer.getData(), updatedData)) { byte[] previousData = observer.getData(); observer.setData(updatedData); updateObserver(path, observer); observer.nodeDataChanged(updatedData, previousData); observer.nodeDataChanged(updatedData, previousData, updatedStat); }/* www .java2 s .co m*/ } } scheduleCheck(event); } } catch (KeeperException e) { logger.warn("Unable to notify observers: path=" + path, e); } catch (Exception e) { logger.warn("Unable to notify observers: path=" + path, e); } } }); }
From source file:io.reign.ObserverManager.java
License:Apache License
@Override public void nodeDeleted(final WatchedEvent event) { delegatorExecutorService.submit(new Runnable() { public void run() { String path = event.getPath(); logger.debug("Notifying ALL observers: nodeDeleted: path={}", path); Set<T> observerSet = getObserverSet(path, false); if (observerSet.size() > 0) { // set up watch for when path comes back if there are // observers try { zkClient.exists(path, true); } catch (Exception e) { logger.warn("Unable to set watch: path=" + path, e); }/*ww w. ja v a2 s .c om*/ for (T observer : observerSet) { logger.trace("Notifying observer: observer.hashCode()={}", observer.hashCode()); synchronized (observer) { byte[] previousData = observer.getData(); observer.setData(null); List<String> previousChildList = observer.getChildList(); observer.setChildList(Collections.EMPTY_LIST); updateObserver(path, observer); if (previousChildList != observer.getChildList() || previousData != observer.getData()) { observer.nodeDeleted(previousData, previousChildList); } } } scheduleCheck(event); } // if observerSet>0 } }); }
From source file:io.reign.Reign.java
License:Apache License
@Override public void process(WatchedEvent event) { // log if TRACE if (logger.isTraceEnabled()) { logger.trace("***** Received ZooKeeper Event: {}", ReflectionToStringBuilder.toString(event, ToStringStyle.DEFAULT_STYLE)); }/*ww w.jav a 2s.c om*/ if (shutdown) { logger.warn("Already shutdown: ignoring event: type={}; path={}", event.getType(), event.getPath()); return; } for (Watcher watcher : watcherList) { watcher.process(event); } }
From source file:io.reign.zk.ResilientZkClient.java
License:Apache License
@Override public void process(final WatchedEvent event) { /***** log event *****/ // log if TRACE if (logger.isTraceEnabled()) { logger.trace("***** Received ZooKeeper Event: {}", ReflectionToStringBuilder.toString(event, ToStringStyle.DEFAULT_STYLE)); }/*from ww w . j a v a 2 s.c o m*/ /***** pass notifications on to registered Watchers *****/ // if (event.getType() != EventType.None) { if (shutdown) { logger.warn("Already shutdown: not passing event to registered watchers: type={}; path={}", event.getType(), event.getPath()); return; } else { for (Watcher watcher : watcherSet) { watcher.process(event); } } // } /***** process events *****/ switch (event.getType()) { case NodeChildrenChanged: this.childWatchesMap.remove(event.getPath()); break; case NodeCreated: case NodeDataChanged: case NodeDeleted: this.dataWatchesMap.remove(event.getPath()); break; case None: Event.KeeperState eventState = event.getState(); if (eventState == Event.KeeperState.SyncConnected) { // this.connected = true; if (currentSessionId == null) { if (logger.isInfoEnabled()) { logger.info( "Restoring watches as necessary: sessionId={}; connectString={}; sessionTimeout={}", new Object[] { this.zooKeeper.getSessionId(), getConnectString(), getSessionTimeout() }); } restoreWatches(); } this.currentSessionId = this.zooKeeper.getSessionId(); this.sessionPassword = this.zooKeeper.getSessionPasswd(); logger.info("SyncConnected: notifying all waiters: currentSessionId={}; connectString={}", currentSessionId, getConnectString()); synchronized (this) { // notify waiting threads that connection has been // established this.notifyAll(); } logger.info("SyncConnected: notified all waiters: currentSessionId={}; connectString={}", currentSessionId, getConnectString()); } else if (eventState == Event.KeeperState.Disconnected) { // this.connected = false; } else if (eventState == Event.KeeperState.Expired) { // expired session; close ZK connection and reconnect if (!this.shutdown) { // if session has been expired, clear out the existing ID logger.info( "Session has been expired by ZooKeeper cluster: reconnecting to establish new session: oldSessionId={}; connectString={}", currentSessionId, getConnectString()); // null out current session ID this.currentSessionId = null; // do connection in another thread so as to not block the ZK event thread spawnReconnectThread(); } } else { logger.warn("Unhandled state: eventType=" + event.getType() + "; eventState=" + eventState); } break; default: logger.warn("Unhandled event type: eventType=" + event.getType() + "; eventState=" + event.getState()); } }
From source file:io.reign.zk.ResilientZkClientWithCache.java
License:Apache License
@Override public void nodeDeleted(WatchedEvent event) { String path = event.getPath(); PathCacheEntry removed = pathCache.remove(path); if (removed != null) { logger.debug("Change detected: removed cache entry: path={}", path); }//from ww w. j a va 2 s . c o m }
From source file:io.reign.zk.ResilientZkClientWithCache.java
License:Apache License
synchronized void handleNodeUpdate(WatchedEvent event) { String path = event.getPath(); logger.info("Updating cache entry: path={}; eventType={}", path, event.getType()); try {// w w w.jav a2 s. c o m byte[] bytes = null; List<String> children = null; Stat stat = null; /** see what we have in cache **/ PathCacheEntry cacheEntry = pathCache.get(path); if (cacheEntry != null) { bytes = cacheEntry.getData(); children = cacheEntry.getChildList(); stat = cacheEntry.getStat(); } if (stat == null) { stat = new Stat(); } /** get update data from zk **/ if (event.getType() == EventType.NodeDataChanged || event.getType() == EventType.NodeCreated) { logger.debug("Change detected: updating path data: path={}", path); bytes = zkClient.getData(path, true, stat); if (cacheEntry == null) { children = zkClient.getChildren(path, true); } } if (event.getType() == EventType.NodeChildrenChanged || event.getType() == EventType.NodeCreated) { logger.debug("Change detected: updating path children: path={}", path); children = zkClient.getChildren(path, true); if (cacheEntry == null) { bytes = zkClient.getData(path, true, stat); } } /** update cache **/ pathCache.put(path, stat, bytes, children); } catch (KeeperException e) { logger.error(this.getClass().getSimpleName() + ": error while trying to update cache entry: " + e + ": path=" + path, e); } catch (InterruptedException e) { logger.warn(this.getClass().getSimpleName() + ": interrupted while trying to update cache entry: " + e + ": path=" + path, e); } }