use of voldemort.store.routed.BasicPipelineData in project voldemort by voldemort.
the class ConfigureNodesLocalHostTest method testConfigureNodesLocalHost.
/*
* Checks to see that the local host is obtained as the first node in the
* list returned by ConfigureNodesLocalHost
*/
@Test
public void testConfigureNodesLocalHost() throws Exception {
List<Node> nodes = getTestNodes();
Cluster cluster = new Cluster("test-route-all-local-pref-cluster", nodes);
FailureDetector failureDetector = new ThresholdFailureDetector(new FailureDetectorConfig().setCluster(cluster));
RoutingStrategy routingStrategy = new RouteToAllLocalPrefStrategy(cluster.getNodesShuffled());
BasicPipelineData<byte[]> pipelineData = new BasicPipelineData<byte[]>();
ConfigureNodesLocalHost<byte[], BasicPipelineData<byte[]>> action = new ConfigureNodesLocalHost<byte[], BasicPipelineData<byte[]>>(pipelineData, Event.COMPLETED, failureDetector, 1, routingStrategy, aKey);
Pipeline pipeline = new Pipeline(Operation.GET, 10000, TimeUnit.MILLISECONDS);
pipeline.addEventAction(Event.STARTED, action);
pipeline.addEvent(Event.STARTED);
pipeline.execute();
if (pipelineData.getFatalError() != null)
throw pipelineData.getFatalError();
assertEquals(cluster.getNodes().size(), pipelineData.getNodes().size());
assertEquals(cluster.getNodesShuffled().size(), pipelineData.getNodes().size());
assertEquals(pipelineData.getNodes().get(0).getHost(), currentHost);
}
use of voldemort.store.routed.BasicPipelineData in project voldemort by voldemort.
the class ConfigureNodesTest method testConfigureNodesWithZones.
@Test
public void testConfigureNodesWithZones() throws Exception {
RoutingStrategy routingStrategy = new ZoneRoutingStrategy(clusterWithZones, storeDef.getZoneReplicationFactor(), storeDef.getReplicationFactor());
BasicPipelineData<byte[]> pipelineData = new BasicPipelineData<byte[]>();
Pipeline pipeline = new Pipeline(Operation.PUT, 10000, TimeUnit.MILLISECONDS);
// PUT with changing zone id
for (int clusterZoneId = 0; clusterZoneId < clusterWithZones.getNumberOfZones(); clusterZoneId++) {
pipelineData.setZonesRequired(storeDef.getZoneCountWrites());
pipeline.addEventAction(Event.STARTED, new ConfigureNodes<byte[], BasicPipelineData<byte[]>>(pipelineData, Event.COMPLETED, failureDetectorWithZones, storeDef.getRequiredReads(), routingStrategy, aKey, clusterWithZones.getZoneById(clusterZoneId)));
pipeline.addEvent(Event.STARTED);
pipeline.execute();
List<Node> pipelineNodes = pipelineData.getNodes();
int pipelineNodesIndex = 0;
List<Integer> proximityList = clusterWithZones.getZoneById(clusterZoneId).getProximityList();
// Check if returned list is as per the proximity list
assertEquals(pipelineNodes.get(pipelineNodesIndex++).getZoneId(), clusterZoneId);
for (; pipelineNodesIndex < pipelineNodes.size(); pipelineNodesIndex++) {
assertEquals(proximityList.get(pipelineNodesIndex - 1), new Integer(pipelineNodes.get(pipelineNodesIndex).getZoneId()));
}
}
// GET with changing zone requirements
for (int zoneReq = 0; zoneReq < clusterWithZones.getNumberOfZones(); zoneReq++) {
pipelineData = new BasicPipelineData<byte[]>();
pipeline = new Pipeline(Operation.GET, 10000, TimeUnit.MILLISECONDS);
pipelineData.setZonesRequired(zoneReq);
pipeline.addEventAction(Event.STARTED, new ConfigureNodes<byte[], BasicPipelineData<byte[]>>(pipelineData, Event.COMPLETED, failureDetectorWithZones, storeDef.getRequiredReads(), routingStrategy, aKey, clusterWithZones.getZoneById(0)));
pipeline.addEvent(Event.STARTED);
pipeline.execute();
// Check the first few nodes which are from different zones
int zoneId = 1;
for (int index = 0; index < zoneReq; index++) {
assertEquals(pipelineData.getNodes().get(index).getZoneId(), zoneId++);
}
}
}
use of voldemort.store.routed.BasicPipelineData in project voldemort by voldemort.
the class ConfigureNodesTest method testConfigureNodes.
@Test
public void testConfigureNodes() throws Exception {
RoutingStrategy routingStrategy = new RouteToAllStrategy(cluster.getNodesShuffled());
BasicPipelineData<byte[]> pipelineData = new BasicPipelineData<byte[]>();
ConfigureNodes<byte[], BasicPipelineData<byte[]>> action = new ConfigureNodes<byte[], BasicPipelineData<byte[]>>(pipelineData, Event.COMPLETED, failureDetector, 1, routingStrategy, aKey, null);
Pipeline pipeline = new Pipeline(Operation.GET, 10000, TimeUnit.MILLISECONDS);
pipeline.addEventAction(Event.STARTED, action);
pipeline.addEvent(Event.STARTED);
pipeline.execute();
if (pipelineData.getFatalError() != null)
throw pipelineData.getFatalError();
assertEquals(cluster.getNodes().size(), pipelineData.getNodes().size());
}
use of voldemort.store.routed.BasicPipelineData in project voldemort by voldemort.
the class ConfigureNodesTest method testConfigureNodesNotEnoughNodes.
@Test(expected = InsufficientOperationalNodesException.class)
public void testConfigureNodesNotEnoughNodes() throws Exception {
RoutingStrategy routingStrategy = new RouteToAllStrategy(cluster.getNodesShuffled());
BasicPipelineData<byte[]> pipelineData = new BasicPipelineData<byte[]>();
ConfigureNodes<byte[], BasicPipelineData<byte[]>> action = new ConfigureNodes<byte[], BasicPipelineData<byte[]>>(pipelineData, Event.COMPLETED, failureDetector, cluster.getNodes().size() + 1, routingStrategy, aKey, null);
Pipeline pipeline = new Pipeline(Operation.GET, 10000, TimeUnit.MILLISECONDS);
pipeline.addEventAction(Event.STARTED, action);
pipeline.addEvent(Event.STARTED);
pipeline.execute();
if (pipelineData.getFatalError() != null)
throw pipelineData.getFatalError();
else
fail();
}
Aggregations