Search in sources :

Example 1 with ZoneRoutingStrategy

use of voldemort.routing.ZoneRoutingStrategy 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++);
        }
    }
}
Also used : BasicPipelineData(voldemort.store.routed.BasicPipelineData) Node(voldemort.cluster.Node) RoutingStrategy(voldemort.routing.RoutingStrategy) ZoneRoutingStrategy(voldemort.routing.ZoneRoutingStrategy) ZoneRoutingStrategy(voldemort.routing.ZoneRoutingStrategy) Pipeline(voldemort.store.routed.Pipeline) Test(org.junit.Test)

Aggregations

Test (org.junit.Test)1 Node (voldemort.cluster.Node)1 RoutingStrategy (voldemort.routing.RoutingStrategy)1 ZoneRoutingStrategy (voldemort.routing.ZoneRoutingStrategy)1 BasicPipelineData (voldemort.store.routed.BasicPipelineData)1 Pipeline (voldemort.store.routed.Pipeline)1