Search in sources :

Example 16 with Zone

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

the class ServerTestUtils method getLocalNonContiguousZonedCluster.

public static Cluster getLocalNonContiguousZonedCluster(int[] zoneIds, int[][] nodeIdsPerZone, int[][] partitionMap, int[] ports) {
    int numberOfZones = zoneIds.length;
    if (numberOfZones < 1) {
        throw new VoldemortException("The number of zones must be positive (" + numberOfZones + ")");
    }
    if (nodeIdsPerZone.length != numberOfZones) {
        throw new VoldemortException("Mismatch between numberOfZones (" + numberOfZones + ") and size of nodesPerZone array (" + nodeIdsPerZone.length + ").");
    }
    int numNodes = 0;
    for (int[] nodeIdsInZone : nodeIdsPerZone) {
        numNodes += nodeIdsInZone.length;
    }
    if (partitionMap.length != numNodes) {
        throw new VoldemortException("Mismatch between numNodes (" + numNodes + ") and size of partitionMap array (" + partitionMap + ").");
    }
    // Generate nodes
    List<Node> nodes = new ArrayList<Node>();
    int partitionOffset = 0;
    int zoneOffset = 0;
    for (int zoneId : zoneIds) {
        for (int nodeId : nodeIdsPerZone[zoneOffset]) {
            List<Integer> partitions = new ArrayList<Integer>(partitionMap[partitionOffset].length);
            for (int p : partitionMap[partitionOffset]) {
                partitions.add(p);
            }
            nodes.add(new Node(nodeId, "localhost", ports[nodeId * 3], ports[nodeId * 3 + 1], ports[nodeId * 3 + 2], zoneId, partitions));
            partitionOffset++;
        }
        zoneOffset++;
    }
    List<Zone> zones = getZonesFromZoneIds(zoneIds);
    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 17 with Zone

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

the class ClusterMapper method readCluster.

@SuppressWarnings("unchecked")
public Cluster readCluster(Reader input, boolean verifySchema) {
    try {
        SAXBuilder builder = new SAXBuilder(false);
        Document doc = builder.build(input);
        if (verifySchema) {
            Validator validator = this.schema.newValidator();
            validator.validate(new JDOMSource(doc));
        }
        Element root = doc.getRootElement();
        if (!root.getName().equals(CLUSTER_ELMT))
            throw new MappingException("Invalid root element: " + doc.getRootElement().getName());
        String name = root.getChildText(CLUSTER_NAME_ELMT);
        List<Zone> zones = new ArrayList<Zone>();
        for (Element node : (List<Element>) root.getChildren(ZONE_ELMT)) zones.add(readZone(node));
        List<Node> servers = new ArrayList<Node>();
        for (Element node : (List<Element>) root.getChildren(SERVER_ELMT)) servers.add(readServer(node));
        return new Cluster(name, servers, zones);
    } catch (JDOMException e) {
        throw new MappingException(e);
    } catch (SAXException e) {
        throw new MappingException(e);
    } catch (IOException e) {
        throw new MappingException(e);
    }
}
Also used : SAXBuilder(org.jdom.input.SAXBuilder) Zone(voldemort.cluster.Zone) Element(org.jdom.Element) Node(voldemort.cluster.Node) ArrayList(java.util.ArrayList) JDOMSource(org.jdom.transform.JDOMSource) Cluster(voldemort.cluster.Cluster) IOException(java.io.IOException) Document(org.jdom.Document) JDOMException(org.jdom.JDOMException) SAXException(org.xml.sax.SAXException) ArrayList(java.util.ArrayList) List(java.util.List) Validator(javax.xml.validation.Validator)

Example 18 with Zone

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

the class ReplaceNodeCLI method updateClusterXML.

private String updateClusterXML() {
    Node nodeToAdd = newCluster.getNodeById(newNodeId);
    List<Node> nodes = new ArrayList<Node>(cluster.getNodes());
    List<Zone> zones = new ArrayList<Zone>(cluster.getZones());
    Node nodeToRemove = cluster.getNodeById(nodeId);
    Node newNode = new Node(nodeId, nodeToAdd.getHost(), nodeToAdd.getHttpPort(), nodeToAdd.getSocketPort(), nodeToAdd.getAdminPort(), nodeToRemove.getZoneId(), nodeToRemove.getPartitionIds(), nodeToAdd.getRestPort());
    boolean isInserted = false;
    for (int i = 0; i < nodes.size(); i++) {
        if (nodes.get(i).getId() == nodeId) {
            nodes.remove(i);
            nodes.add(i, newNode);
            isInserted = true;
            break;
        }
    }
    if (isInserted == false) {
        logger.error("Unable to insert the new node, something odd happened");
        throw new VoldemortApplicationException("Unable to insert the new node, something odd happened");
    }
    Cluster updatedCluster = new Cluster(cluster.getName(), nodes, zones);
    return new ClusterMapper().writeCluster(updatedCluster);
}
Also used : VoldemortApplicationException(voldemort.VoldemortApplicationException) Zone(voldemort.cluster.Zone) Node(voldemort.cluster.Node) ArrayList(java.util.ArrayList) Cluster(voldemort.cluster.Cluster) ClusterMapper(voldemort.xml.ClusterMapper)

Example 19 with Zone

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

the class ClusterMapperTest method testZoneProximityList.

public void testZoneProximityList() {
    ClusterMapper mapper = new ClusterMapper();
    Cluster cluster = mapper.readCluster(new StringReader(VoldemortTestConstants.getInvalidFourNodeClusterWithZonesXml()));
    Zone expectedZone0 = new Zone(0, new ArrayList<Integer>(Arrays.asList(1, 2)));
    Zone expectedZone1 = new Zone(1, new ArrayList<Integer>(Arrays.asList(0, 2)));
    Zone expectedZone2 = new Zone(2, new ArrayList<Integer>(Arrays.asList(1, 0)));
    assertEquals(cluster.getNumberOfNodes(), 4);
    Zone zone0 = cluster.getZoneById(0);
    Zone zone1 = cluster.getZoneById(1);
    Zone zone2 = cluster.getZoneById(2);
    assertEquals("zone0", expectedZone0, zone0);
    assertEquals("zone1", expectedZone1, zone1);
    assertEquals("zone2", expectedZone2, zone2);
}
Also used : Zone(voldemort.cluster.Zone) StringReader(java.io.StringReader) Cluster(voldemort.cluster.Cluster)

Example 20 with Zone

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

the class ClusterMapperTest method testOtherClusters.

public void testOtherClusters() {
    ClusterMapper mapper = new ClusterMapper();
    Cluster cluster = mapper.readCluster(new StringReader(VoldemortTestConstants.getNineNodeClusterXml()));
    assertEquals(cluster.getNumberOfNodes(), 9);
    assertEquals(cluster.getZones().size(), 1);
    cluster = mapper.readCluster(new StringReader(VoldemortTestConstants.getTwoNodeClusterXml()));
    assertEquals(cluster.getNumberOfNodes(), 2);
    assertEquals(cluster.getZones().size(), 1);
    cluster = mapper.readCluster(new StringReader(VoldemortTestConstants.getFourNodeClusterWithZonesXml()));
    assertEquals(cluster.getNumberOfNodes(), 4);
    Collection<Zone> zones = cluster.getZones();
    assertEquals(zones.size(), 3);
    for (Zone zone : zones) {
        assertEquals(zone.getProximityList().size(), 2);
    }
}
Also used : Zone(voldemort.cluster.Zone) StringReader(java.io.StringReader) Cluster(voldemort.cluster.Cluster)

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