Example usage for org.apache.zookeeper WatchedEvent getPath

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

Introduction

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

Prototype

public String getPath() 

Source Link

Usage

From source file:org.apache.airavata.orchestrator.core.impl.GFACPassiveJobSubmitter.java

License:Apache License

synchronized public void process(WatchedEvent event) {
    logger.info(getClass().getName() + event.getPath());
    logger.info(getClass().getName() + event.getType());
    synchronized (mutex) {
        switch (event.getState()) {
        case SyncConnected:
            mutex.notify();//from ww w  . ja  va  2s .  c o m
        }
        switch (event.getType()) {
        case NodeCreated:
            mutex.notify();
            break;
        }
    }
}

From source file:org.apache.bookkeeper.benchmark.BenchReadThroughputLatency.java

License:Apache License

@SuppressWarnings("deprecation")
public static void main(String[] args) throws Exception {
    Options options = new Options();
    options.addOption("ledger", true, "Ledger to read. If empty, read all ledgers which come available. "
            + " Cannot be used with -listen");
    options.addOption("listen", true, "Listen for creation of <arg> ledgers, and read each one fully");
    options.addOption("password", true, "Password used to access ledgers (default 'benchPasswd')");
    options.addOption("zookeeper", true, "Zookeeper ensemble, default \"localhost:2181\"");
    options.addOption("sockettimeout", true, "Socket timeout for bookkeeper client. In seconds. Default 5");
    options.addOption("help", false, "This message");

    CommandLineParser parser = new PosixParser();
    CommandLine cmd = parser.parse(options, args);

    if (cmd.hasOption("help")) {
        usage(options);/*from  w w  w.  jav a 2  s . c o m*/
        System.exit(-1);
    }

    final String servers = cmd.getOptionValue("zookeeper", "localhost:2181");
    final byte[] passwd = cmd.getOptionValue("password", "benchPasswd").getBytes(UTF_8);
    final int sockTimeout = Integer.parseInt(cmd.getOptionValue("sockettimeout", "5"));
    if (cmd.hasOption("ledger") && cmd.hasOption("listen")) {
        LOG.error("Cannot used -ledger and -listen together");
        usage(options);
        System.exit(-1);
    }

    final AtomicInteger ledger = new AtomicInteger(0);
    final AtomicInteger numLedgers = new AtomicInteger(0);
    if (cmd.hasOption("ledger")) {
        ledger.set(Integer.parseInt(cmd.getOptionValue("ledger")));
    } else if (cmd.hasOption("listen")) {
        numLedgers.set(Integer.parseInt(cmd.getOptionValue("listen")));
    } else {
        LOG.error("You must use -ledger or -listen");
        usage(options);
        System.exit(-1);
    }

    final CountDownLatch shutdownLatch = new CountDownLatch(1);
    final CountDownLatch connectedLatch = new CountDownLatch(1);
    final String nodepath = String.format("/ledgers/L%010d", ledger.get());

    final ClientConfiguration conf = new ClientConfiguration();
    conf.setReadTimeout(sockTimeout).setZkServers(servers);

    final ZooKeeper zk = new ZooKeeper(servers, 3000, new Watcher() {
        public void process(WatchedEvent event) {
            if (event.getState() == Event.KeeperState.SyncConnected
                    && event.getType() == Event.EventType.None) {
                connectedLatch.countDown();
            }
        }
    });
    final Set<String> processedLedgers = new HashSet<String>();
    try {
        zk.register(new Watcher() {
            public void process(WatchedEvent event) {
                try {
                    if (event.getState() == Event.KeeperState.SyncConnected
                            && event.getType() == Event.EventType.None) {
                        connectedLatch.countDown();
                    } else if (event.getType() == Event.EventType.NodeCreated
                            && event.getPath().equals(nodepath)) {
                        readLedger(conf, ledger.get(), passwd);
                        shutdownLatch.countDown();
                    } else if (event.getType() == Event.EventType.NodeChildrenChanged) {
                        if (numLedgers.get() < 0) {
                            return;
                        }
                        List<String> children = zk.getChildren("/ledgers", true);
                        List<String> ledgers = new ArrayList<String>();
                        for (String child : children) {
                            if (LEDGER_PATTERN.matcher(child).find()) {
                                ledgers.add(child);
                            }
                        }
                        for (String ledger : ledgers) {
                            synchronized (processedLedgers) {
                                if (processedLedgers.contains(ledger)) {
                                    continue;
                                }
                                final Matcher m = LEDGER_PATTERN.matcher(ledger);
                                if (m.find()) {
                                    int ledgersLeft = numLedgers.decrementAndGet();
                                    final Long ledgerId = Long.valueOf(m.group(1));
                                    processedLedgers.add(ledger);
                                    Thread t = new Thread() {
                                        public void run() {
                                            readLedger(conf, ledgerId, passwd);
                                        }
                                    };
                                    t.start();
                                    if (ledgersLeft <= 0) {
                                        shutdownLatch.countDown();
                                    }
                                } else {
                                    LOG.error("Cant file ledger id in {}", ledger);
                                }
                            }
                        }
                    } else {
                        LOG.warn("Unknown event {}", event);
                    }
                } catch (Exception e) {
                    LOG.error("Exception in watcher", e);
                }
            }
        });
        connectedLatch.await();
        if (ledger.get() != 0) {
            if (zk.exists(nodepath, true) != null) {
                readLedger(conf, ledger.get(), passwd);
                shutdownLatch.countDown();
            } else {
                LOG.info("Watching for creation of" + nodepath);
            }
        } else {
            zk.getChildren("/ledgers", true);
        }
        shutdownLatch.await();
        LOG.info("Shutting down");
    } finally {
        zk.close();
    }
}

From source file:org.apache.bookkeeper.bookie.Bookie.java

License:Apache License

private void instantiateZookeeperClient(int port, String zkServers) throws IOException {
    if (zkServers == null) {
        LOG.warn(/*from  ww w.ja  v  a  2s  .  c om*/
                "No ZK servers passed to Bookie constructor so BookKeeper clients won't know about this server!");
        zk = null;
        return;
    }
    // Create the ZooKeeper client instance
    zk = new ZooKeeper(zkServers, 10000, new Watcher() {
        @Override
        public void process(WatchedEvent event) {
            // TODO: handle session disconnects and expires
            if (LOG.isDebugEnabled()) {
                LOG.debug("Process: " + event.getType() + " " + event.getPath());
            }
        }
    });
    // Create the ZK ephemeral node for this Bookie.
    try {
        zk.create(BOOKIE_REGISTRATION_PATH + InetAddress.getLocalHost().getHostAddress() + ":" + port,
                new byte[0], Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
    } catch (Exception e) {
        LOG.fatal("ZK exception registering ephemeral Znode for Bookie!", e);
        // Throw an IOException back up. This will cause the Bookie
        // constructor to error out. Alternatively, we could do a System
        // exit here as this is a fatal error.
        throw new IOException(e);
    }
}

From source file:org.apache.bookkeeper.client.BookKeeper.java

License:Apache License

/**
 * Create a bookkeeper client. A zookeeper client and a client socket factory
 * will be instantiated as part of this constructor.
 * //  w w w.  j a  v  a 2  s.  co  m
 * @param servers
 *          A list of one of more servers on which zookeeper is running. The
 *          client assumes that the running bookies have been registered with
 *          zookeeper under the path
 *          {@link BookieWatcher#BOOKIE_REGISTRATION_PATH}
 * @throws IOException
 * @throws InterruptedException
 * @throws KeeperException
 */
public BookKeeper(String servers) throws IOException, InterruptedException, KeeperException {
    this(new ZooKeeper(servers, 10000, new Watcher() {
        @Override
        public void process(WatchedEvent event) {
            // TODO: handle session disconnects and expires
            if (LOG.isDebugEnabled()) {
                LOG.debug("Process: " + event.getType() + " " + event.getPath());
            }
        }
    }), new NioClientSocketChannelFactory(Executors.newCachedThreadPool(), Executors.newCachedThreadPool()));

    ownZKHandle = true;
    ownChannelFactory = true;
}

From source file:org.apache.bookkeeper.meta.AbstractZkLedgerManager.java

License:Apache License

@Override
public void process(WatchedEvent event) {
    LOG.info("Received watched event {} from zookeeper based ledger manager.", event);
    if (Event.EventType.None == event.getType()) {
        /** TODO: BOOKKEEPER-537 to handle expire events.
        if (Event.KeeperState.Expired == event.getState()) {
        LOG.info("ZooKeeper client expired on ledger manager.");
        Set<Long> keySet = new HashSet<Long>(listeners.keySet());
        for (Long lid : keySet) {/*  w  ww.  ja  va  2  s . co m*/
            scheduler.submit(new ReadLedgerMetadataTask(lid));
            LOG.info("Re-read ledger metadata for {} after zookeeper session expired.", lid);
        }
        }
        **/
        return;
    }
    String path = event.getPath();
    if (null == path) {
        return;
    }
    final long ledgerId;
    try {
        ledgerId = getLedgerId(event.getPath());
    } catch (IOException ioe) {
        LOG.info("Received invalid ledger path {} : ", event.getPath(), ioe);
        return;
    }
    switch (event.getType()) {
    case NodeDeleted:
        Set<LedgerMetadataListener> listenerSet = listeners.get(ledgerId);
        if (null != listenerSet) {
            synchronized (listenerSet) {
                if (LOG.isDebugEnabled()) {
                    LOG.debug("Removed ledger metadata listeners on ledger {} : {}", ledgerId, listenerSet);
                }
                for (LedgerMetadataListener l : listenerSet) {
                    l.onChanged(ledgerId, null);
                }
                listeners.remove(ledgerId, listenerSet);
            }
        } else {
            if (LOG.isDebugEnabled()) {
                LOG.debug("No ledger metadata listeners to remove from ledger {} after it's deleted.",
                        ledgerId);
            }
        }
        break;
    case NodeDataChanged:
        new ReadLedgerMetadataTask(ledgerId).run();
        break;
    default:
        LOG.debug("Received event {} on {}.", event.getType(), event.getPath());
        break;
    }
}

From source file:org.apache.bookkeeper.replication.TestLedgerUnderreplicationManager.java

License:Apache License

/**
 * Test enabling the ledger re-replication. After enableLedegerReplication,
 * should continue getLedgerToRereplicate() task
 *//*from  ww w  .j a  v  a 2s.com*/
@Test(timeout = 20000)
public void testEnableLedgerReplication() throws Exception {
    isLedgerReplicationDisabled = true;
    final LedgerUnderreplicationManager replicaMgr = lmf1.newLedgerUnderreplicationManager();

    // simulate few urLedgers before disabling
    final Long ledgerA = 0xfeadeefdacL;
    final String missingReplica = "localhost:3181";
    try {
        replicaMgr.markLedgerUnderreplicated(ledgerA, missingReplica);
    } catch (UnavailableException e) {
        LOG.debug("Unexpected exception while marking urLedger", e);
        fail("Unexpected exception while marking urLedger" + e.getMessage());
    }

    // disabling replication
    replicaMgr.disableLedgerReplication();
    LOG.debug("Disabled Ledeger Replication");

    String znodeA = getUrLedgerZnode(ledgerA);
    final CountDownLatch znodeLatch = new CountDownLatch(2);
    String urledgerA = StringUtils.substringAfterLast(znodeA, "/");
    String urLockLedgerA = basePath + "/locks/" + urledgerA;
    zkc1.exists(urLockLedgerA, new Watcher() {
        @Override
        public void process(WatchedEvent event) {
            if (event.getType() == EventType.NodeCreated) {
                znodeLatch.countDown();
                LOG.debug("Recieved node creation event for the zNodePath:" + event.getPath());
            }

        }
    });
    // getLedgerToRereplicate is waiting until enable rereplication
    Thread thread1 = new Thread() {
        @Override
        public void run() {
            try {
                Long lA = replicaMgr.getLedgerToRereplicate();
                assertEquals("Should be the ledger I just marked", lA, ledgerA);
                isLedgerReplicationDisabled = false;
                znodeLatch.countDown();
            } catch (UnavailableException e) {
                LOG.debug("Unexpected exception while marking urLedger", e);
                isLedgerReplicationDisabled = false;
            }
        }
    };
    thread1.start();

    try {
        assertFalse("shouldn't complete", znodeLatch.await(1, TimeUnit.SECONDS));
        assertTrue("Ledger replication is not disabled!", isLedgerReplicationDisabled);
        assertEquals("Failed to disable ledger replication!", 2, znodeLatch.getCount());

        replicaMgr.enableLedgerReplication();
        znodeLatch.await(5, TimeUnit.SECONDS);
        LOG.debug("Enabled Ledeger Replication");
        assertTrue("Ledger replication is not disabled!", !isLedgerReplicationDisabled);
        assertEquals("Failed to disable ledger replication!", 0, znodeLatch.getCount());
    } finally {
        thread1.interrupt();
    }
}

From source file:org.apache.bookkeeper.test.CloseTest.java

License:Apache License

/**
 * Watcher method. //from  w  ww .j  a  v  a 2  s.  c  o m
 */
synchronized public void process(WatchedEvent event) {
    LOG.info("Process: " + event.getType() + " " + event.getPath());
}

From source file:org.apache.bookkeeper.tools.BookKeeperTools.java

License:Apache License

/**
 * Constructor that takes in a ZooKeeper servers connect string so we know
 * how to connect to ZooKeeper to retrieve information about the BookKeeper
 * cluster. We need this before we can do any type of admin operations on
 * the BookKeeper cluster./* w w w .j a v  a 2s . co m*/
 * 
 * @param zkServers
 *            Comma separated list of hostname:port pairs for the ZooKeeper
 *            servers cluster.
 * @throws IOException
 *             Throws this exception if there is an error instantiating the
 *             ZooKeeper client.
 * @throws InterruptedException
 *             Throws this exception if there is an error instantiating the
 *             BookKeeper client.
 * @throws KeeperException
 *             Throws this exception if there is an error instantiating the
 *             BookKeeper client.
 */
public BookKeeperTools(String zkServers) throws IOException, InterruptedException, KeeperException {
    // Create the ZooKeeper client instance
    zk = new ZooKeeper(zkServers, 10000, new Watcher() {
        @Override
        public void process(WatchedEvent event) {
            if (LOG.isDebugEnabled()) {
                LOG.debug("Process: " + event.getType() + " " + event.getPath());
            }
        }
    });
    // Create the BookKeeper client instance
    bkc = new BookKeeper(zk);
}

From source file:org.apache.bookkeeper.zookeeper.ZooKeeperWatcherBase.java

License:Apache License

@Override
public void process(WatchedEvent event) {
    // If event type is NONE, this is a connection status change
    if (event.getType() != EventType.None) {
        LOG.debug("Received event: {}, path: {} from ZooKeeper server", event.getType(), event.getPath());
        getEventCounter(event.getType()).inc();
        // notify the child watchers
        notifyEvent(event);//w  w  w  .  j av  a2s .  co m
        return;
    }
    getStateCounter(event.getState()).inc();
    LOG.debug("Received {} from ZooKeeper server", event.getState());
    // TODO: Needs to handle AuthFailed, SaslAuthenticated events
    switch (event.getState()) {
    case SyncConnected:
        LOG.info("ZooKeeper client is connected now.");
        clientConnectLatch.countDown();
        break;
    case Disconnected:
        LOG.info(
                "ZooKeeper client is disconnected from zookeeper now, but it is OK unless we received EXPIRED event.");
        break;
    case Expired:
        clientConnectLatch = new CountDownLatch(1);
        LOG.error("ZooKeeper client connection to the ZooKeeper server has expired!");
        break;
    default:
        // do nothing
        break;
    }
    // notify the child watchers
    notifyEvent(event);
}

From source file:org.apache.camel.component.zookeeper.operations.FutureEventDrivenOperation.java

License:Apache License

public void process(WatchedEvent event) {
    this.event = event;
    EventType received = event.getType();
    if (LOG.isDebugEnabled()) {
        LOG.debug(format("Recieved event of type %s for node '%s'", received, event.getPath()));
    }//from  w  w  w  .java2s .c  o  m

    for (EventType watched : awaitedTypes) {
        if (watched.equals(received)) {
            result = getResult();
            waitForAnyWatchedType.countDown();
        }
    }

    if (LOG.isTraceEnabled() && waitForAnyWatchedType.getCount() > 0) {

        StringBuilder b = new StringBuilder();
        for (EventType type : awaitedTypes) {
            b.append(type).append(", ");
        }
        if (b.length() > 0) {
            b.setLength(b.length() - 2);
        }
        LOG.trace(String.format("Recieved event of type %s did not match any watched types %s", received,
                awaitedTypes));
    }
}