Search in sources :

Example 6 with Zone

use of voldemort.cluster.Zone in project voldemort by voldemort.

the class ServerTestUtils method getLocalZonedCluster.

/**
 * Returns a cluster with <b>numberOfNodes</b> nodes in <b>numberOfZones</b>
 * zones. It is important that <b>numberOfNodes</b> be divisible by
 * <b>numberOfZones</b>
 *
 * @param numberOfNodes Number of nodes in the cluster
 * @param partitionsPerNode Number of partitions in one node
 * @param numberOfZones Number of zones
 * @return Cluster
 */
public static Cluster getLocalZonedCluster(int numberOfNodes, int numberOfZones, int[] nodeToZoneMapping, int[][] partitionMapping, int[] ports) {
    List<Node> nodes = new ArrayList<Node>();
    for (int i = 0; i < numberOfNodes; i++) {
        List<Integer> partitions = new ArrayList<Integer>(partitionMapping[i].length);
        for (int p : partitionMapping[i]) {
            partitions.add(p);
        }
        nodes.add(new Node(i, "localhost", ports[3 * i], ports[3 * i + 1], ports[3 * i + 2], nodeToZoneMapping[i], partitions));
    }
    // Generate zones
    List<Zone> zones = getZones(numberOfZones);
    return new Cluster("cluster", nodes, zones);
}
Also used : Zone(voldemort.cluster.Zone) Node(voldemort.cluster.Node) ArrayList(java.util.ArrayList) Cluster(voldemort.cluster.Cluster)

Example 7 with Zone

use of voldemort.cluster.Zone in project voldemort by voldemort.

the class VoldemortAdminTool method executeShowRoutingPlan.

private static void executeShowRoutingPlan(AdminClient adminClient, String storeName, List<String> keyList) throws DecoderException {
    Cluster cluster = adminClient.getAdminClientCluster();
    List<StoreDefinition> storeDefs = adminClient.metadataMgmtOps.getRemoteStoreDefList().getValue();
    StoreDefinition storeDef = StoreDefinitionUtils.getStoreDefinitionWithName(storeDefs, storeName);
    StoreRoutingPlan routingPlan = new StoreRoutingPlan(cluster, storeDef);
    BaseStoreRoutingPlan bRoutingPlan = new BaseStoreRoutingPlan(cluster, storeDef);
    final int COLUMN_WIDTH = 30;
    for (String keyStr : keyList) {
        byte[] key = ByteUtils.fromHexString(keyStr);
        System.out.println("Key :" + keyStr);
        System.out.println("Replicating Partitions :" + routingPlan.getReplicatingPartitionList(key));
        System.out.println("Replicating Nodes :");
        List<Integer> nodeList = routingPlan.getReplicationNodeList(routingPlan.getMasterPartitionId(key));
        for (int i = 0; i < nodeList.size(); i++) {
            System.out.println(nodeList.get(i) + "\t" + cluster.getNodeById(nodeList.get(i)).getHost());
        }
        System.out.println("Zone Nary information :");
        HashMap<Integer, Integer> zoneRepMap = storeDef.getZoneReplicationFactor();
        for (Zone zone : cluster.getZones()) {
            System.out.println("\tZone #" + zone.getId());
            int numReplicas = -1;
            if (zoneRepMap == null) {
                // non zoned cluster
                numReplicas = storeDef.getReplicationFactor();
            } else {
                // zoned cluster
                if (!zoneRepMap.containsKey(zone.getId())) {
                    Utils.croak("Repfactor for Zone " + zone.getId() + " not found in storedef");
                }
                numReplicas = zoneRepMap.get(zone.getId());
            }
            String FormatString = "%s %s %s\n";
            System.out.format(FormatString, Utils.paddedString("REPLICA#", COLUMN_WIDTH), Utils.paddedString("PARTITION", COLUMN_WIDTH), Utils.paddedString("NODE", COLUMN_WIDTH));
            for (int i = 0; i < numReplicas; i++) {
                Integer nodeId = bRoutingPlan.getNodeIdForZoneNary(zone.getId(), i, key);
                Integer partitionId = routingPlan.getNodesPartitionIdForKey(nodeId, key);
                System.out.format(FormatString, Utils.paddedString(i + "", COLUMN_WIDTH), Utils.paddedString(partitionId.toString(), COLUMN_WIDTH), Utils.paddedString(nodeId + "(" + cluster.getNodeById(nodeId).getHost() + ")", COLUMN_WIDTH));
            }
            System.out.println();
        }
        System.out.println("-----------------------------------------------");
        System.out.println();
    }
}
Also used : BaseStoreRoutingPlan(voldemort.routing.BaseStoreRoutingPlan) StoreRoutingPlan(voldemort.routing.StoreRoutingPlan) Zone(voldemort.cluster.Zone) StoreDefinition(voldemort.store.StoreDefinition) Cluster(voldemort.cluster.Cluster) BaseStoreRoutingPlan(voldemort.routing.BaseStoreRoutingPlan)

Example 8 with Zone

use of voldemort.cluster.Zone in project voldemort by voldemort.

the class PartitionBalanceUtils method verboseClusterDump.

/**
 * Prints the details of cluster xml in various formats. Some information is
 * repeated in different forms. This is intentional so that it is easy to
 * find the specific view of the cluster xml that you want.
 *
 * @param cluster
 * @return pretty string of cluster balance
 */
public static String verboseClusterDump(final Cluster cluster) {
    StringBuilder builder = new StringBuilder();
    builder.append("CLUSTER XML SUMMARY\n");
    Map<Integer, Integer> zoneIdToPartitionCount = Maps.newHashMap();
    Map<Integer, Integer> zoneIdToNodeCount = Maps.newHashMap();
    for (Zone zone : cluster.getZones()) {
        zoneIdToPartitionCount.put(zone.getId(), 0);
        zoneIdToNodeCount.put(zone.getId(), 0);
    }
    for (Node node : cluster.getNodes()) {
        zoneIdToPartitionCount.put(node.getZoneId(), zoneIdToPartitionCount.get(node.getZoneId()) + node.getNumberOfPartitions());
        zoneIdToNodeCount.put(node.getZoneId(), zoneIdToNodeCount.get(node.getZoneId()) + 1);
    }
    builder.append("\n");
    builder.append("Number of partitions per zone:\n");
    for (Zone zone : cluster.getZones()) {
        builder.append("\tZone: " + zone.getId() + " - " + zoneIdToPartitionCount.get(zone.getId()) + "\n");
    }
    builder.append("\n");
    builder.append("Number of nodes per zone:\n");
    for (Zone zone : cluster.getZones()) {
        builder.append("\tZone: " + zone.getId() + " - " + zoneIdToNodeCount.get(zone.getId()) + "\n");
    }
    builder.append("\n");
    builder.append("Nodes in each zone:\n");
    for (Zone zone : cluster.getZones()) {
        builder.append("\tZone: " + zone.getId() + " - " + cluster.getNodeIdsInZone(zone.getId()) + "\n");
    }
    builder.append("\n");
    builder.append("Number of partitions per node:\n");
    for (Node node : cluster.getNodes()) {
        builder.append("\tNode ID: " + node.getId() + " - " + node.getNumberOfPartitions() + " (" + node.getHost() + ")\n");
    }
    builder.append("\n");
    if (cluster.getZones().size() > 1) {
        builder.append("ZONE-PARTITION SUMMARY:\n");
        builder.append("\n");
        builder.append("Partitions in each zone:\n");
        for (Zone zone : cluster.getZones()) {
            builder.append("\tZone: " + zone.getId() + " - " + compressedListOfPartitionsInZone(cluster, zone.getId()) + "\n");
        }
        builder.append("\n");
        builder.append("Contiguous partition run lengths in each zone ('{run length : count}'):\n");
        for (Zone zone : cluster.getZones()) {
            builder.append("\tZone: " + zone.getId() + " - " + getPrettyMapOfContiguousPartitionRunLengths(cluster, zone.getId()) + "\n");
        }
        builder.append("\n");
        builder.append("The following nodes have hot partitions:\n");
        builder.append(getHotPartitionsDueToContiguity(cluster, 5));
        builder.append("\n");
    }
    return builder.toString();
}
Also used : Zone(voldemort.cluster.Zone) Node(voldemort.cluster.Node)

Example 9 with Zone

use of voldemort.cluster.Zone in project voldemort by voldemort.

the class RebalanceUtils method dropZone.

/**
 * Given a interim cluster with a previously vacated zone, constructs a new
 * cluster object with the drop zone completely removed
 *
 * @param intermediateCluster
 * @param dropZoneId
 * @return adjusted cluster with the zone dropped
 */
public static Cluster dropZone(Cluster intermediateCluster, int dropZoneId) {
    // Filter out nodes that don't belong to the zone being dropped
    Set<Node> survivingNodes = new HashSet<Node>();
    for (int nodeId : intermediateCluster.getNodeIds()) {
        if (intermediateCluster.getNodeById(nodeId).getZoneId() != dropZoneId) {
            survivingNodes.add(intermediateCluster.getNodeById(nodeId));
        }
    }
    // Filter out dropZoneId from all zones
    Set<Zone> zones = new HashSet<Zone>();
    for (int zoneId : intermediateCluster.getZoneIds()) {
        if (zoneId == dropZoneId) {
            continue;
        }
        List<Integer> proximityList = intermediateCluster.getZoneById(zoneId).getProximityList();
        proximityList.remove(new Integer(dropZoneId));
        zones.add(new Zone(zoneId, proximityList));
    }
    return new Cluster(intermediateCluster.getName(), Utils.asSortedList(survivingNodes), Utils.asSortedList(zones));
}
Also used : Zone(voldemort.cluster.Zone) Node(voldemort.cluster.Node) Cluster(voldemort.cluster.Cluster) HashSet(java.util.HashSet)

Example 10 with Zone

use of voldemort.cluster.Zone in project voldemort by voldemort.

the class RebalanceUtils method validateClusterZonesSame.

/**
 * Confirms that both clusters have the same set of zones defined.
 *
 * @param lhs
 * @param rhs
 */
public static void validateClusterZonesSame(final Cluster lhs, final Cluster rhs) {
    Set<Zone> lhsSet = new HashSet<Zone>(lhs.getZones());
    Set<Zone> rhsSet = new HashSet<Zone>(rhs.getZones());
    if (!lhsSet.equals(rhsSet))
        throw new VoldemortException("Zones are not the same [ lhs cluster zones (" + lhs.getZones() + ") not equal to rhs cluster zones (" + rhs.getZones() + ") ]");
}
Also used : Zone(voldemort.cluster.Zone) VoldemortException(voldemort.VoldemortException) HashSet(java.util.HashSet)

Aggregations

Zone (voldemort.cluster.Zone)23 Cluster (voldemort.cluster.Cluster)17 Node (voldemort.cluster.Node)17 ArrayList (java.util.ArrayList)13 VoldemortException (voldemort.VoldemortException)7 StoreDefinition (voldemort.store.StoreDefinition)7 HashMap (java.util.HashMap)6 List (java.util.List)6 Test (org.junit.Test)6 HashSet (java.util.HashSet)3 ByteArray (voldemort.utils.ByteArray)3 StringReader (java.io.StringReader)2 Document (org.jdom.Document)2 Element (org.jdom.Element)2 VoldemortTestConstants.getNineNodeCluster (voldemort.VoldemortTestConstants.getNineNodeCluster)2 SerializerDefinition (voldemort.serialization.SerializerDefinition)2 AbstractByteArrayStoreTest (voldemort.store.AbstractByteArrayStoreTest)2 FailingReadsStore (voldemort.store.FailingReadsStore)2 FailingStore (voldemort.store.FailingStore)2 InsufficientOperationalNodesException (voldemort.store.InsufficientOperationalNodesException)2