Package voldemort.partition

Source Code of voldemort.partition.TestDistribution

package voldemort.partition;

import java.io.File;
import java.text.NumberFormat;
import java.util.HashMap;
import java.util.Map;

import voldemort.cluster.Cluster;
import voldemort.cluster.Node;
import voldemort.routing.ConsistentRoutingStrategy;
import voldemort.routing.RoutingStrategy;
import voldemort.serialization.json.JsonTypeDefinition;
import voldemort.serialization.json.JsonTypeSerializer;
import voldemort.utils.Utils;
import voldemort.xml.ClusterMapper;

public class TestDistribution {

    public static void main(String[] args) throws Exception {
        if(args.length < 2)
            Utils.croak("USAGE: java TestDistribution cluster.xml replication_factor max_id");
        long start = System.currentTimeMillis();
        File file = new File(args[0]);
        int repFactor = Integer.parseInt(args[1]);
        int maxVal = Integer.parseInt(args[2]);
        ClusterMapper mapper = new ClusterMapper();
        Cluster cluster = mapper.readCluster(file);
        RoutingStrategy strategy = new ConsistentRoutingStrategy(cluster, repFactor);
        JsonTypeSerializer serializer = new JsonTypeSerializer(JsonTypeDefinition.INT32);
        Map<Integer, Integer> counts = new HashMap<Integer, Integer>();

        for(int i = 0; i < maxVal; i++) {
            for(Node node: strategy.routeRequest(serializer.toBytes(i))) {
                int newCount = 1;
                if(counts.get(node.getId()) != null) {
                    newCount = counts.get(node.getId()) + 1;
                }
                counts.put(node.getId(), newCount);
            }
        }

        int sum = 0;
        int totalCounts = 0;
        for(int countVal: counts.values()) {
            sum += countVal;
            totalCounts++;
        }
        int avg = sum / totalCounts;

        NumberFormat percent = NumberFormat.getPercentInstance();
        percent.setMaximumFractionDigits(2);
        System.out.println("Node\tKeys\tPercent\tVariation");

        for(int nodeId: counts.keySet()) {
            System.out.println(nodeId
                               + "\t"
                               + counts.get(nodeId)
                               + "\t"
                               + percent.format(counts.get(nodeId) / (double) sum)
                               + "\t"
                               + percent.format((counts.get(nodeId) - avg)
                                                / (double) counts.get(nodeId)));
        }

        double msPerHash = (System.currentTimeMillis() - start) / ((double) repFactor * maxVal);
        NumberFormat nf = NumberFormat.getNumberInstance();
        nf.setMaximumFractionDigits(10);
        System.out.println(nf.format(msPerHash) + " ms per hash");
    }
}
TOP

Related Classes of voldemort.partition.TestDistribution

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.