Example usage for org.apache.zookeeper Quotas statNode

List of usage examples for org.apache.zookeeper Quotas statNode

Introduction

In this page you can find the example usage for org.apache.zookeeper Quotas statNode.

Prototype

String statNode

To view the source code for org.apache.zookeeper Quotas statNode.

Click Source Link

Document

the stat node that monitors the limit of a subtree.

Usage

From source file:com.github.mosuka.zookeeper.nicli.command.ListQuotaCommand.java

License:Apache License

@Override
public void run(Map<String, Object> parameters) {
    String path = null;//w ww .j a  v a2s .c  o  m
    try {
        path = (String) parameters.get("path");
        String quotaPath = Quotas.quotaZookeeper + path + "/" + Quotas.limitNode;
        String statPath = Quotas.quotaZookeeper + path + "/" + Quotas.statNode;

        ZooKeeper zk = getZookeeperConnection().getZooKeeper();

        Stat quotaStat = new Stat();
        byte[] quotaData = zk.getData(quotaPath, false, quotaStat);
        StatsTrack quotaStatsTrack = new StatsTrack(new String(quotaData));
        Map<String, Object> quotaMap = new LinkedHashMap<String, Object>();
        quotaMap.put("path", quotaPath);
        quotaMap.put("count", quotaStatsTrack.getCount());
        quotaMap.put("bytes", quotaStatsTrack.getBytes());
        putResponse("quota", quotaMap);

        Stat statStat = new Stat();
        byte[] statData = zk.getData(statPath, false, statStat);
        StatsTrack statStatsTrack = new StatsTrack(new String(statData));
        Map<String, Object> statMap = new LinkedHashMap<String, Object>();
        statMap.put("path", statPath);
        statMap.put("count", statStatsTrack.getCount());
        statMap.put("bytes", statStatsTrack.getBytes());
        putResponse("stat", statMap);

        setStatus(Command.STATUS_SUCCESS);
        setMessage(Command.SUCCESS_MESSAGE);
    } catch (KeeperException e) {
        setStatus(Command.STATUS_ERROR);
        setMessage("quota for " + path + " does not exist.");
    } catch (InterruptedException e) {
        setStatus(Command.STATUS_ERROR);
        setMessage(e.getMessage());
    } catch (ClassCastException e) {
        setStatus(Command.STATUS_ERROR);
        setMessage(e.getMessage());
    } catch (NullPointerException e) {
        setStatus(Command.STATUS_ERROR);
        setMessage(e.getMessage());
    }
}

From source file:com.github.mosuka.zookeeper.nicli.util.QuotaUtil.java

License:Apache License

public static boolean createQuota(ZooKeeper zk, String path, long bytes, int numNodes)
        throws KeeperException, IOException, InterruptedException {
    // check if the path exists. We cannot create
    // quota for a path that already exists in zookeeper
    // for now./*from w w  w .  j  av  a  2  s  .  c om*/
    Stat initStat = zk.exists(path, false);
    if (initStat == null) {
        throw new IllegalArgumentException(path + " does not exist.");
    }
    // now check if their is already existing
    // parent or child that has quota

    String quotaPath = Quotas.quotaZookeeper;
    // check for more than 2 children --
    // if zookeeper_stats and zookeeper_qutoas
    // are not the children then this path
    // is an ancestor of some path that
    // already has quota
    String realPath = Quotas.quotaZookeeper + path;
    try {
        List<String> children = zk.getChildren(realPath, false);
        for (String child : children) {
            if (!child.startsWith("zookeeper_")) {
                throw new IllegalArgumentException(path + " has child " + child + " which has a quota");
            }
        }
    } catch (KeeperException.NoNodeException ne) {
        // this is fine
    }

    // check for any parent that has been quota
    checkIfParentQuota(zk, path);

    // this is valid node for quota
    // start creating all the parents
    if (zk.exists(quotaPath, false) == null) {
        try {
            zk.create(Quotas.procZookeeper, null, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
            zk.create(Quotas.quotaZookeeper, null, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
        } catch (KeeperException.NodeExistsException ne) {
            // do nothing
        }
    }

    // now create the direct children
    // and the stat and quota nodes
    String[] splits = path.split("/");
    StringBuilder sb = new StringBuilder();
    sb.append(quotaPath);
    for (int i = 1; i < splits.length; i++) {
        sb.append("/" + splits[i]);
        quotaPath = sb.toString();
        try {
            zk.create(quotaPath, null, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
        } catch (KeeperException.NodeExistsException ne) {
            // do nothing
        }
    }
    String statPath = quotaPath + "/" + Quotas.statNode;
    quotaPath = quotaPath + "/" + Quotas.limitNode;
    StatsTrack strack = new StatsTrack(null);
    strack.setBytes(bytes);
    strack.setCount(numNodes);
    try {
        zk.create(quotaPath, strack.toString().getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
        StatsTrack stats = new StatsTrack(null);
        stats.setBytes(0L);
        stats.setCount(0);
        zk.create(statPath, stats.toString().getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
    } catch (KeeperException.NodeExistsException ne) {
        byte[] data = zk.getData(quotaPath, false, new Stat());
        StatsTrack strackC = new StatsTrack(new String(data));
        if (bytes != -1L) {
            strackC.setBytes(bytes);
        }
        if (numNodes != -1) {
            strackC.setCount(numNodes);
        }
        zk.setData(quotaPath, strackC.toString().getBytes(), -1);
    }
    return true;
}