Example usage for org.apache.zookeeper Quotas quotaZookeeper

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

Introduction

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

Prototype

String quotaZookeeper

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

Click Source Link

Document

the zookeeper quota node that acts as the quota management node for zookeeper

Usage

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

License:Apache License

@Override
public void run(Map<String, Object> parameters) {
    try {/*from   w  w  w.  ja v  a 2 s.c o  m*/
        String path = (String) parameters.get("path");
        boolean bytes = parameters.containsKey("bytes") ? (Boolean) parameters.get("bytes") : DEFAULT_BYTES;
        boolean numNodes = parameters.containsKey("num_nodes") ? (Boolean) parameters.get("num_nodes")
                : DEFAULT_NUM_NODES;

        ZooKeeper zk = getZookeeperConnection().getZooKeeper();

        String parentPath = Quotas.quotaZookeeper + path;
        String quotaPath = Quotas.quotaZookeeper + path + "/" + Quotas.limitNode;

        if (zk.exists(quotaPath, false) == null) {
            setStatus(Command.STATUS_ERROR);
            setMessage("quota for " + path + " does not exist.");
            return;
        }

        byte[] data = zk.getData(quotaPath, false, new Stat());
        StatsTrack strack = new StatsTrack(new String(data));

        if (bytes && !numNodes) {
            strack.setBytes(-1L);
            zk.setData(quotaPath, strack.toString().getBytes(), -1);
        } else if (!bytes && numNodes) {
            strack.setCount(-1);
            zk.setData(quotaPath, strack.toString().getBytes(), -1);
        } else if (bytes && numNodes) {
            List<String> children = zk.getChildren(parentPath, false);
            for (String child : children) {
                zk.delete(parentPath + "/" + child, -1);
            }
            QuotaUtil.trimProcQuotas(zk, parentPath);
        } else {
            setStatus(Command.STATUS_ERROR);
            setMessage("too few arguments");
            return;
        }

        setStatus(Command.STATUS_SUCCESS);
        setMessage(Command.SUCCESS_MESSAGE);
    } catch (KeeperException e) {
        setStatus(Command.STATUS_ERROR);
        setMessage(e.getMessage());
    } catch (InterruptedException e) {
        setStatus(Command.STATUS_ERROR);
        setMessage(e.getMessage());
    } catch (IOException 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.command.ListQuotaCommand.java

License:Apache License

@Override
public void run(Map<String, Object> parameters) {
    String path = null;/*  w  ww  .  jav  a2 s  . 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 ww. ja  v a  2 s  .  co  m*/
    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;
}

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

License:Apache License

private static void checkIfParentQuota(ZooKeeper zk, String path) throws InterruptedException, KeeperException {
    final String[] splits = path.split("/");
    String quotaPath = Quotas.quotaZookeeper;
    for (String str : splits) {
        if (str.length() == 0) {
            // this should only be for the beginning of the path
            // i.e. "/..." - split(path)[0] is empty string before first '/'
            continue;
        }/*from   w w  w.ja  va2  s  . c o m*/
        quotaPath += "/" + str;
        List<String> children = null;
        try {
            children = zk.getChildren(quotaPath, false);
        } catch (KeeperException.NoNodeException ne) {
            // LOG.debug("child removed during quota check", ne);
            return;
        }
        if (children.size() == 0) {
            return;
        }
        for (String child : children) {
            if (Quotas.limitNode.equals(child)) {
                throw new IllegalArgumentException(path + " has a parent " + quotaPath + " which has a quota");
            }
        }
    }
}

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

License:Apache License

/**
 * trim the quota tree to recover unwanted tree elements in the quota's tree
 *
 * @param zk/*from   w  w w . j  ava  2  s. com*/
 *            the zookeeper client
 * @param path
 *            the path to start from and go up and see if their is any
 *            unwanted parent in the path.
 * @return true if sucessful
 * @throws KeeperException
 * @throws IOException
 * @throws InterruptedException
 */
public static boolean trimProcQuotas(ZooKeeper zk, String path)
        throws KeeperException, IOException, InterruptedException {
    if (Quotas.quotaZookeeper.equals(path)) {
        return true;
    }
    List<String> children = zk.getChildren(path, false);
    if (children.size() == 0) {
        zk.delete(path, -1);
        String parent = path.substring(0, path.lastIndexOf('/'));
        return trimProcQuotas(zk, parent);
    } else {
        return true;
    }
}