Example usage for org.apache.zookeeper WatchedEvent getType

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

Introduction

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

Prototype

public EventType getType() 

Source Link

Usage

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

License:Apache License

/**
 * Process the watched events for registered listeners
 *///w w  w  .ja  va2s . 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;
    }
}

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

License:Apache License

@Override
public void process(WatchedEvent event) {
    if (event.getType() == Event.EventType.None) {
        if (event.getState() == Event.KeeperState.Expired) {
            scheduleTask(this, conf.getZKSessionTimeoutMilliseconds());
        }//  w  w w .  jav a 2s .co  m
        return;
    }
    if (event.getType() == Event.EventType.NodeChildrenChanged) {
        // watch namespace changes again.
        doWatchNamespaceChanges();
    }
}

From source file:com.twitter.distributedlog.readahead.ReadAheadWorker.java

License:Apache License

@Override
public void process(WatchedEvent event) {
    if (zkNotificationDisabled) {
        return;/*ww w .j a  v  a2  s .  c  o  m*/
    }

    if ((event.getType() == Watcher.Event.EventType.None)
            && (event.getState() == Watcher.Event.KeeperState.SyncConnected)) {
        LOG.debug("Reconnected ...");
    } else if (((event.getType() == Event.EventType.None) && (event.getState() == Event.KeeperState.Expired))
            || ((event.getType() == Event.EventType.NodeChildrenChanged))) {
        AsyncNotification notification;
        synchronized (notificationLock) {
            reInitializeMetadata = true;
            LOG.debug("{} Read ahead node changed", fullyQualifiedName);
            notification = metadataNotification;
            metadataNotification = null;
        }
        metadataNotificationTimeMillis = System.currentTimeMillis();
        if (null != notification) {
            notification.notifyOnOperationComplete();
        }
    } else if (event.getType() == Event.EventType.NodeDeleted) {
        logDeleted = true;
        setReadAheadError(tracker);
    }
}

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

License:Apache License

private void expireZooKeeperSession(ZooKeeper zk, int timeout)
        throws IOException, InterruptedException, KeeperException {
    final CountDownLatch latch = new CountDownLatch(1);

    ZooKeeper newZk = new ZooKeeper(zkServers, timeout, new Watcher() {
        @Override/* w ww .  ja v a2 s  .c  om*/
        public void process(WatchedEvent event) {
            if (event.getType() == EventType.None && event.getState() == KeeperState.SyncConnected) {
                latch.countDown();
            }
        }
    }, zk.getSessionId(), zk.getSessionPasswd());

    if (!latch.await(timeout, TimeUnit.MILLISECONDS)) {
        throw KeeperException.create(KeeperException.Code.CONNECTIONLOSS);
    }

    newZk.close();
}

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

License:Apache License

private CountDownLatch awaitConnectionEvent(final KeeperState state, final ZooKeeperClient zkc) {
    final CountDownLatch connected = new CountDownLatch(1);
    Watcher watcher = new Watcher() {
        @Override//  w w w  .ja  va  2s  .  c  o m
        public void process(WatchedEvent event) {
            if (event.getType() == EventType.None && event.getState() == state) {
                connected.countDown();
            }
        }
    };
    zkc.register(watcher);
    return connected;
}

From source file:com.twitter.distributedlog.util.LimitedPermitManager.java

License:Apache License

@Override
public void process(WatchedEvent event) {
    if (event.getType().equals(Event.EventType.None)) {
        switch (event.getState()) {
        case SyncConnected:
            forceSetAllowPermits(true);//from w w w  .ja v  a2  s.c o m
            break;
        case Disconnected:
            forceSetAllowPermits(false);
            break;
        case Expired:
            forceSetAllowPermits(false);
            break;
        default:
            break;
        }
    }
}

From source file:com.twitter.distributedlog.zk.ZKWatcherManager.java

License:Apache License

@Override
public void process(WatchedEvent event) {
    switch (event.getType()) {
    case None:/*from  w w w . ja v  a  2s .  c  o  m*/
        handleKeeperStateEvent(event);
        break;
    case NodeChildrenChanged:
        handleChildWatchEvent(event);
        break;
    default:
        break;
    }
}

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

License:Apache License

private ZooKeeper buildZooKeeper() throws ZooKeeperConnectionException, InterruptedException {
    Watcher watcher = new Watcher() {
        @Override/*from ww  w.  j a v a2 s.c  om*/
        public void process(WatchedEvent event) {
            switch (event.getType()) {
            case None:
                switch (event.getState()) {
                case Expired:
                    if (null == retryPolicy) {
                        LOG.info("ZooKeeper {}' session expired. Event: {}", name, event);
                        closeInternal();
                    }
                    authenticated = false;
                    break;
                case Disconnected:
                    if (null == retryPolicy) {
                        LOG.info("ZooKeeper {} is disconnected from zookeeper now,"
                                + " but it is OK unless we received EXPIRED event.", name);
                    }
                    // Mark as not authenticated if expired or disconnected. In both cases
                    // we lose any attached auth info. Relying on Expired/Disconnected is
                    // sufficient since all Expired/Disconnected events are processed before
                    // all SyncConnected events, and the underlying member is not updated until
                    // SyncConnected is received.
                    authenticated = false;
                    break;
                default:
                    break;
                }
            }

            try {
                for (Watcher watcher : watchers) {
                    try {
                        watcher.process(event);
                    } catch (Throwable t) {
                        LOG.warn("Encountered unexpected exception from watcher {} : ", watcher, t);
                    }
                }
            } catch (Throwable t) {
                LOG.warn("Encountered unexpected exception when firing watched event {} : ", event, t);
            }
        }
    };

    Set<Watcher> watchers = new HashSet<Watcher>();
    watchers.add(watcher);

    ZooKeeper zk;
    try {
        RetryPolicy opRetryPolicy = null == retryPolicy
                ? new BoundExponentialBackoffRetryPolicy(sessionTimeoutMs, sessionTimeoutMs, 0)
                : retryPolicy;
        RetryPolicy connectRetryPolicy = null == retryPolicy
                ? new BoundExponentialBackoffRetryPolicy(sessionTimeoutMs, sessionTimeoutMs, 0)
                : new BoundExponentialBackoffRetryPolicy(sessionTimeoutMs, sessionTimeoutMs, Integer.MAX_VALUE);
        zk = org.apache.bookkeeper.zookeeper.ZooKeeperClient.newBuilder().connectString(zooKeeperServers)
                .sessionTimeoutMs(sessionTimeoutMs).watchers(watchers).operationRetryPolicy(opRetryPolicy)
                .connectRetryPolicy(connectRetryPolicy).statsLogger(statsLogger)
                .retryThreadCount(retryThreadCount).requestRateLimit(requestRateLimit).build();
    } catch (KeeperException e) {
        throw new ZooKeeperConnectionException("Problem connecting to servers: " + zooKeeperServers, e);
    } catch (IOException e) {
        throw new ZooKeeperConnectionException("Problem connecting to servers: " + zooKeeperServers, e);
    }
    return zk;
}

From source file:com.twitter.distributedlog.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.//from  w  ww. j a va2 s .  c o m
 */
public Watcher registerExpirationHandler(final ZooKeeperSessionExpireNotifier onExpired) {
    Watcher watcher = new Watcher() {
        @Override
        public void process(WatchedEvent event) {
            if (event.getType() == EventType.None && event.getState() == KeeperState.Expired) {
                try {
                    onExpired.notifySessionExpired();
                } catch (Exception exc) {
                    // do nothing
                }
            }
        }
    };
    register(watcher);
    return watcher;
}

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

License:Apache License

/**
 * Expire given zookeeper client's session.
 *
 * @param zkc/*from   w  w w  .  jav a2  s .  c  om*/
 *          zookeeper client
 * @param zkServers
 *          zookeeper servers
 * @param timeout
 *          timeout
 * @throws Exception
 */
public static void expireSession(ZooKeeperClient zkc, String zkServers, int timeout) throws Exception {
    final CountDownLatch expireLatch = new CountDownLatch(1);
    final CountDownLatch latch = new CountDownLatch(1);
    ZooKeeper oldZk = zkc.get();
    oldZk.exists("/", new Watcher() {
        @Override
        public void process(WatchedEvent event) {
            logger.debug("Receive event : {}", event);
            if (event.getType() == Event.EventType.None && event.getState() == Event.KeeperState.Expired) {
                expireLatch.countDown();
            }
        }
    });
    ZooKeeper newZk = new ZooKeeper(zkServers, timeout, new Watcher() {
        @Override
        public void process(WatchedEvent event) {
            if (Event.EventType.None == event.getType()
                    && Event.KeeperState.SyncConnected == event.getState()) {
                latch.countDown();
            }
        }
    }, oldZk.getSessionId(), oldZk.getSessionPasswd());
    if (!latch.await(timeout, TimeUnit.MILLISECONDS)) {
        throw KeeperException.create(KeeperException.Code.CONNECTIONLOSS);
    }
    newZk.close();

    boolean done = false;
    Stopwatch expireWait = Stopwatch.createStarted();
    while (!done && expireWait.elapsed(TimeUnit.MILLISECONDS) < timeout * 2) {
        try {
            zkc.get().exists("/", false);
            done = true;
        } catch (KeeperException ke) {
            done = (ke.code() == KeeperException.Code.SESSIONEXPIRED);
        }
    }

    assertTrue("Client should receive session expired event.",
            expireLatch.await(timeout, TimeUnit.MILLISECONDS));
}