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);
}
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);
}
}
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);
}
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);
}
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);
}
}
Aggregations