Package voldemort.routing

Source Code of voldemort.routing.StoreRoutingPlanTest

/*
* Copyright 2013 LinkedIn, Inc
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/

package voldemort.routing;

import static org.junit.Assert.assertEquals;

import java.util.HashMap;
import java.util.List;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import voldemort.ClusterTestUtils;
import voldemort.ServerTestUtils;
import voldemort.TestUtils;
import voldemort.client.RoutingTier;
import voldemort.cluster.Cluster;
import voldemort.cluster.Zone;
import voldemort.serialization.SerializerDefinition;
import voldemort.store.StoreDefinition;
import voldemort.store.StoreDefinitionBuilder;
import voldemort.store.bdb.BdbStorageConfiguration;
import voldemort.store.slop.strategy.HintedHandoffStrategyType;

import com.google.common.collect.Lists;

// TODO: Break this test into part that tests BaseStoreRoutingPlan and
// StoreRoutingPlan.
public class StoreRoutingPlanTest {

    // plan for 2 zones
    BaseStoreRoutingPlan zzBaseRoutingPlan;
    BaseStoreRoutingPlan nonZonedBaseRoutingPlan;
    BaseStoreRoutingPlan z1z3BaseRoutingPlan;
    // plan for 3 zones
    BaseStoreRoutingPlan zzzBaseRoutingPlan;
    BaseStoreRoutingPlan z1z3z5BaseRoutingPlan;

    // plan for 2 zones
    StoreRoutingPlan zzStoreRoutingPlan;
    StoreRoutingPlan nonZonedStoreRoutingPlan;
    StoreRoutingPlan z1z3StoreRoutingPlan;
   
    // plan for 3 zones
    StoreRoutingPlan zzzStoreRoutingPlan;
    StoreRoutingPlan z1z3z5StoreRoutingPlan;

    public StoreRoutingPlanTest() {}

    @Before
    public void setup() {
        Cluster nonZonedCluster = ServerTestUtils.getLocalCluster(3, new int[] { 1000, 2000, 3000,
                1000, 2000, 3000, 1000, 2000, 3000 }, new int[][] { { 0 }, { 1, 3 }, { 2 } });
        StoreDefinition nonZoned211StoreDef = new StoreDefinitionBuilder().setName("non-zoned")
                                                                          .setType(BdbStorageConfiguration.TYPE_NAME)
                                                                          .setKeySerializer(new SerializerDefinition("string"))
                                                                          .setValueSerializer(new SerializerDefinition("string"))
                                                                          .setRoutingPolicy(RoutingTier.CLIENT)
                                                                          .setRoutingStrategyType(RoutingStrategyType.CONSISTENT_STRATEGY)
                                                                          .setReplicationFactor(2)
                                                                          .setPreferredReads(1)
                                                                          .setRequiredReads(1)
                                                                          .setPreferredWrites(1)
                                                                          .setRequiredWrites(1)
                                                                          .build();
        nonZonedBaseRoutingPlan = new BaseStoreRoutingPlan(nonZonedCluster, nonZoned211StoreDef);
        nonZonedStoreRoutingPlan = new StoreRoutingPlan(nonZonedCluster, nonZoned211StoreDef);

        int[] dummyZonedPorts = new int[] { 1000, 2000, 3000, 1000, 2000, 3000, 1000, 2000, 3000,
                1000, 2000, 3000, 1000, 2000, 3000, 1000, 2000, 3000 };
        Cluster zzCluster = ServerTestUtils.getLocalZonedCluster(6,
                                                                 2,
                                                                 new int[] { 0, 0, 0, 1, 1, 1 },
                                                                 new int[][] { { 0 }, { 1, 6 },
                                                                         { 2 }, { 3 }, { 4, 7 },
                                                                         { 5 } },
                                                                 dummyZonedPorts);
        HashMap<Integer, Integer> zrfRWStoreWithReplication = new HashMap<Integer, Integer>();
        zrfRWStoreWithReplication.put(0, 2);
        zrfRWStoreWithReplication.put(1, 2);
        StoreDefinition zz211StoreDef = new StoreDefinitionBuilder().setName("zoned")
                                                                    .setType(BdbStorageConfiguration.TYPE_NAME)
                                                                    .setKeySerializer(new SerializerDefinition("string"))
                                                                    .setValueSerializer(new SerializerDefinition("string"))
                                                                    .setRoutingPolicy(RoutingTier.CLIENT)
                                                                    .setRoutingStrategyType(RoutingStrategyType.ZONE_STRATEGY)
                                                                    .setReplicationFactor(4)
                                                                    .setPreferredReads(1)
                                                                    .setRequiredReads(1)
                                                                    .setPreferredWrites(1)
                                                                    .setRequiredWrites(1)
                                                                    .setZoneCountReads(0)
                                                                    .setZoneCountWrites(0)
                                                                    .setZoneReplicationFactor(zrfRWStoreWithReplication)
                                                                    .setHintedHandoffStrategy(HintedHandoffStrategyType.PROXIMITY_STRATEGY)
                                                                    .build();
        zzBaseRoutingPlan = new BaseStoreRoutingPlan(zzCluster, zz211StoreDef);
        zzStoreRoutingPlan = new StoreRoutingPlan(zzCluster, zz211StoreDef);

        Cluster zzzCluster = ServerTestUtils.getLocalZonedCluster(9, 3, new int[] { 0, 0, 0, 1, 1,
                1, 2, 2, 2 }, new int[][] { { 0 }, { 10 }, { 1, 2 }, { 3 }, { 4 }, { 6 }, { 5, 7 },
                { 9 }, { 8 } }, new int[] { 1000, 2000, 3000, 1000, 2000, 3000, 1000, 2000, 3000,
                1000, 2000, 3000, 1000, 2000, 3000, 1000, 2000, 3000, 1000, 2000, 3000, 1000, 2000,
                3000, 1000, 2000, 3000 });

        HashMap<Integer, Integer> zoneRep211 = new HashMap<Integer, Integer>();
        zoneRep211.put(0, 2);
        zoneRep211.put(1, 2);
        zoneRep211.put(2, 2);

        StoreDefinition zzz211StoreDef = new StoreDefinitionBuilder().setName("zzz")
                                                                     .setType(BdbStorageConfiguration.TYPE_NAME)
                                                                     .setKeySerializer(new SerializerDefinition("string"))
                                                                     .setValueSerializer(new SerializerDefinition("string"))
                                                                     .setRoutingPolicy(RoutingTier.CLIENT)
                                                                     .setRoutingStrategyType(RoutingStrategyType.ZONE_STRATEGY)
                                                                     .setReplicationFactor(6)
                                                                     .setPreferredReads(1)
                                                                     .setRequiredReads(1)
                                                                     .setPreferredWrites(1)
                                                                     .setRequiredWrites(1)
                                                                     .setZoneCountReads(0)
                                                                     .setZoneCountWrites(0)
                                                                     .setZoneReplicationFactor(zoneRep211)
                                                                     .setHintedHandoffStrategy(HintedHandoffStrategyType.PROXIMITY_STRATEGY)
                                                                     .build();

        zzzBaseRoutingPlan = new BaseStoreRoutingPlan(zzzCluster, zzz211StoreDef);
        zzzStoreRoutingPlan = new StoreRoutingPlan(zzzCluster, zzz211StoreDef);
    }
   
    @Before
    public void setupNonContiguous() {
        Cluster z1z3Current = ClusterTestUtils.getZ1Z3ClusterWithNonContiguousNodeIds();
        HashMap<Integer, Integer> zoneRep211 = new HashMap<Integer, Integer>();
        zoneRep211.put(1, 2);
        zoneRep211.put(3, 2);
        StoreDefinition z1z3211StoreDef = new StoreDefinitionBuilder().setName("z1z3211")
                                                                    .setType(BdbStorageConfiguration.TYPE_NAME)
                                                                    .setKeySerializer(new SerializerDefinition("string"))
                                                                    .setValueSerializer(new SerializerDefinition("string"))
                                                                    .setRoutingPolicy(RoutingTier.CLIENT)
                                                                    .setRoutingStrategyType(RoutingStrategyType.ZONE_STRATEGY)
                                                                    .setReplicationFactor(4)
                                                                    .setPreferredReads(1)
                                                                    .setRequiredReads(1)
                                                                    .setPreferredWrites(1)
                                                                    .setRequiredWrites(1)
                                                                    .setZoneCountReads(0)
                                                                    .setZoneCountWrites(0)
                                                                    .setZoneReplicationFactor(zoneRep211)
                                                                    .setHintedHandoffStrategy(HintedHandoffStrategyType.PROXIMITY_STRATEGY)
                                                                    .build();
        z1z3BaseRoutingPlan = new BaseStoreRoutingPlan(z1z3Current, z1z3211StoreDef);
        z1z3StoreRoutingPlan = new StoreRoutingPlan(z1z3Current, z1z3211StoreDef);
       
      
        // 3 zones
        Cluster z1z3z5Current = ClusterTestUtils.getZ1Z3Z5ClusterWithNonContiguousNodeIds();
        HashMap<Integer, Integer> zoneRep3zones211 = new HashMap<Integer, Integer>();
    
        zoneRep3zones211.put(1, 2);
        zoneRep3zones211.put(3, 2);
        zoneRep3zones211.put(5, 2);

        StoreDefinition z1z3z5211StoreDef = new StoreDefinitionBuilder().setName("z1z3z5211")
                                                                     .setType(BdbStorageConfiguration.TYPE_NAME)
                                                                     .setKeySerializer(new SerializerDefinition("string"))
                                                                     .setValueSerializer(new SerializerDefinition("string"))
                                                                     .setRoutingPolicy(RoutingTier.CLIENT)
                                                                     .setRoutingStrategyType(RoutingStrategyType.ZONE_STRATEGY)
                                                                     .setReplicationFactor(6)
                                                                     .setPreferredReads(1)
                                                                     .setRequiredReads(1)
                                                                     .setPreferredWrites(1)
                                                                     .setRequiredWrites(1)
                                                                     .setZoneCountReads(0)
                                                                     .setZoneCountWrites(0)
                                                                     .setZoneReplicationFactor(zoneRep3zones211)
                                                                     .setHintedHandoffStrategy(HintedHandoffStrategyType.PROXIMITY_STRATEGY)
                                                                     .build();

        z1z3z5BaseRoutingPlan = new BaseStoreRoutingPlan(z1z3z5Current, z1z3z5211StoreDef);
        z1z3z5StoreRoutingPlan = new StoreRoutingPlan(z1z3z5Current, z1z3z5211StoreDef);
    }

    @Test
    public void testZZStoreRoutingPlan() {
        HashMap<Integer, List<byte[]>> samplePartitionKeysMap = TestUtils.createPartitionsKeys(zzStoreRoutingPlan,
                                                                                               1);
        assertEquals("Node 1 does not contain p5?",
                     (Integer) 6,
                     zzStoreRoutingPlan.getNodesPartitionIdForKey(1, samplePartitionKeysMap.get(5)
                                                                                      .get(0)));
        assertEquals("Node 4 does not contain p5?",
                     (Integer) 7,
                     zzStoreRoutingPlan.getNodesPartitionIdForKey(4, samplePartitionKeysMap.get(5)
                                                                                      .get(0)));
        assertEquals("Replication list does not match up",
                     Lists.newArrayList(0, 1, 3, 4),
                     zzStoreRoutingPlan.getReplicationNodeList(0));

        assertEquals("Zone replica type should be 1",
                     1,
                     zzBaseRoutingPlan.getZoneNAry(0, 0, samplePartitionKeysMap.get(6).get(0)));
        assertEquals("Zone replica type should be 0",
                     0,
                     zzBaseRoutingPlan.getZoneNAry(0, 1, samplePartitionKeysMap.get(6).get(0)));
        assertEquals("Zone replica type should be 1",
                     1,
                     zzBaseRoutingPlan.getZoneNAry(1, 3, samplePartitionKeysMap.get(7).get(0)));
        assertEquals("Zone replica type should be 0",
                     0,
                     zzBaseRoutingPlan.getZoneNAry(1, 4, samplePartitionKeysMap.get(7).get(0)));

        assertEquals("Replica owner should be 1",
                     1,
                     zzBaseRoutingPlan.getNodeIdForZoneNary(0, 1, samplePartitionKeysMap.get(2)
                                                                                        .get(0)));
        assertEquals("Replica owner should be 1",
                     1,
                     zzBaseRoutingPlan.getNodeIdForZoneNary(0, 0, samplePartitionKeysMap.get(3)
                                                                                        .get(0)));
        assertEquals("Replica owner should be 4",
                     4,
                     zzBaseRoutingPlan.getNodeIdForZoneNary(1, 1, samplePartitionKeysMap.get(1)
                                                                                        .get(0)));
        assertEquals("Replica owner should be 3",
                     3,
                     zzBaseRoutingPlan.getNodeIdForZoneNary(1, 0, samplePartitionKeysMap.get(2)
                                                                                        .get(0)));

        assertEquals("Does Zone 1 have a replica",
                     true,
                     zzzStoreRoutingPlan.zoneNAryExists(1, 0, 1));
    }
   
    @Test
    public void testZ1Z3StoreRoutingPlan() {
        HashMap<Integer, List<byte[]>> samplePartitionKeysMap = TestUtils.createPartitionsKeys(z1z3StoreRoutingPlan,
                                                                                               1);
        assertEquals("Node 3 does not contain p6?",
                     (Integer) 6,
                     z1z3StoreRoutingPlan.getNodesPartitionIdForKey(3, samplePartitionKeysMap.get(6)
                                                                                      .get(0)));
        assertEquals("Node 4 does not contain p10?",
                     (Integer) 10,
                     z1z3StoreRoutingPlan.getNodesPartitionIdForKey(4, samplePartitionKeysMap.get(10)
                                                                                      .get(0)));
        assertEquals("Replication list does not match up",
                     Lists.newArrayList(3, 4, 9, 10),
                     z1z3StoreRoutingPlan.getReplicationNodeList(0));

        assertEquals("Zone replica type should be 0",
                      0,
                     z1z3BaseRoutingPlan.getZoneNAry(1, 3, samplePartitionKeysMap.get(6).get(0)));
       
        assertEquals("Zone replica type should be 1",
                     1,
                     z1z3BaseRoutingPlan.getZoneNAry(1, 5, samplePartitionKeysMap.get(6).get(0)));
       
        assertEquals("Zone replica type should be 1",
                     1,
                     z1z3BaseRoutingPlan.getZoneNAry(1, 3, samplePartitionKeysMap.get(7).get(0)));
       
        assertEquals("Zone replica type should be 0",
                     0,
                     z1z3BaseRoutingPlan.getZoneNAry(1, 5, samplePartitionKeysMap.get(7).get(0)));

        assertEquals("Replica owner should be 3",
                     3,
                     z1z3BaseRoutingPlan.getNodeIdForZoneNary(1, 1, samplePartitionKeysMap.get(2)
                                                                                        .get(0)));
        assertEquals("Replica owner should be 9",
                     5,
                     z1z3BaseRoutingPlan.getNodeIdForZoneNary(1, 1, samplePartitionKeysMap.get(3)
                                                                                        .get(0)));
        assertEquals("Replica owner should be 5",
                     5,
                     z1z3BaseRoutingPlan.getNodeIdForZoneNary(1, 1, samplePartitionKeysMap.get(1)
                                                                                        .get(0)));
        assertEquals("Replica owner should be 4",
                     4,
                     zzBaseRoutingPlan.getNodeIdForZoneNary(1, 0, samplePartitionKeysMap.get(2)
                                                                                        .get(0)));
    }


    @Test
    public void testZZZStoreRoutingPlan() {
        HashMap<Integer, List<byte[]>> samplePartitionKeysMap = TestUtils.createPartitionsKeys(zzzStoreRoutingPlan,
                                                                                               1);

        assertEquals("Node 1 does not contain p8?",
                     (Integer) 10,
                     zzzStoreRoutingPlan.getNodesPartitionIdForKey(1,
                                                              samplePartitionKeysMap.get(8).get(0)));

        assertEquals("Node 3 does not contain p1?",
                     (Integer) 3,
                     zzzStoreRoutingPlan.getNodesPartitionIdForKey(3,
                                                              samplePartitionKeysMap.get(1).get(0)));
        assertEquals("Replication list does not match up",
                     Lists.newArrayList(0, 2, 3, 4, 6, 8),
                     zzzStoreRoutingPlan.getReplicationNodeList(0));

        assertEquals("Replication list does not match up",
                     Lists.newArrayList(3, 4, 6, 8, 1, 0),
                     zzzStoreRoutingPlan.getReplicationNodeList(3));

        assertEquals("Zone replica type should be 0",
                     0,
                     zzzBaseRoutingPlan.getZoneNAry(0, 1, samplePartitionKeysMap.get(6).get(0)));

        assertEquals("Zone replica type should be 0 in zone 2",
                     0,
                     zzzBaseRoutingPlan.getZoneNAry(2, 6, samplePartitionKeysMap.get(6).get(0)));

        assertEquals("Replica owner should be 3",
                     3,
                     zzzBaseRoutingPlan.getNodeIdForZoneNary(1, 0, samplePartitionKeysMap.get(1)
                                                                                         .get(0)));

        assertEquals("Replica secondary should be 8",
                     8,
                     zzzBaseRoutingPlan.getNodeIdForZoneNary(2, 1, samplePartitionKeysMap.get(0)
                                                                                         .get(0)));

        assertEquals("Does Zone 2 have a replica",
                     true,
                     zzzStoreRoutingPlan.zoneNAryExists(2, 1, 0));

    }
   
    @Test
    public void testZ1Z3Z5StoreRoutingPlan() {
        HashMap<Integer, List<byte[]>> samplePartitionKeysMap = TestUtils.createPartitionsKeys(z1z3z5StoreRoutingPlan,
                                                                                               1);

        assertEquals("Node 3 does not contain p8?",
                     (Integer) 9,
                     z1z3z5StoreRoutingPlan.getNodesPartitionIdForKey(3,
                                                              samplePartitionKeysMap.get(8).get(0)));

        assertEquals("Node 5 does not contain p1?",
                     (Integer) 2,
                     z1z3z5StoreRoutingPlan.getNodesPartitionIdForKey(5,
                                                              samplePartitionKeysMap.get(1).get(0)));
        assertEquals("Replication list does not match up",
                     Lists.newArrayList(3, 4, 9, 10, 15, 16 ),
                     z1z3z5StoreRoutingPlan.getReplicationNodeList(0));

        assertEquals("Replication list does not match up",
                     Lists.newArrayList(9, 10, 3, 5, 15, 16),
                     z1z3z5StoreRoutingPlan.getReplicationNodeList(3));

        assertEquals("Zone replica type should be 0",
                     0,
                     z1z3z5BaseRoutingPlan.getZoneNAry(1, 3, samplePartitionKeysMap.get(6).get(0)));

        assertEquals("Zone replica type should be 1 in zone 1",
                     1,
                     z1z3z5BaseRoutingPlan.getZoneNAry(1, 5, samplePartitionKeysMap.get(6).get(0)));

        assertEquals("Replica owner should be 4",
                     4,
                     z1z3z5BaseRoutingPlan.getNodeIdForZoneNary(1, 0, samplePartitionKeysMap.get(1)
                                                                                         .get(0)));
        assertEquals("Replica secondary should be 10",
                     10,
                     z1z3z5BaseRoutingPlan.getNodeIdForZoneNary(3, 1, samplePartitionKeysMap.get(0)
                                                                                         .get(0)));

        assertEquals("Does Zone 3 have a replica",
                     true,
                     z1z3z5StoreRoutingPlan.zoneNAryExists(3, 1, 0));

    }

    @Test
    public void testNonZonedStoreRoutingPlan() {
        HashMap<Integer, List<byte[]>> samplePartitionKeysMap = TestUtils.createPartitionsKeys(nonZonedStoreRoutingPlan,
                                                                                               1);

        assertEquals("Node 1 does not contain p2 as secondary?",
                     (Integer) 3,
                     nonZonedStoreRoutingPlan.getNodesPartitionIdForKey(1,
                                                                        samplePartitionKeysMap.get(2)
                                                                                            .get(0)));
        assertEquals("Replication list does not match up",
                     Lists.newArrayList(1, 2),
                     nonZonedStoreRoutingPlan.getReplicationNodeList(1));

        assertEquals("Zone replica type should be 1",
                     1,
                     nonZonedBaseRoutingPlan.getZoneNAry(Zone.DEFAULT_ZONE_ID,
                                                     2,
                                                     samplePartitionKeysMap.get(1).get(0)));
        assertEquals("Zone replica type should be 0",
                     0,
                     nonZonedBaseRoutingPlan.getZoneNAry(Zone.DEFAULT_ZONE_ID,
                                                     1,
                                                     samplePartitionKeysMap.get(3).get(0)));
        assertEquals("Replica owner should be 2",
                     2,
                     nonZonedBaseRoutingPlan.getNodeIdForZoneNary(Zone.DEFAULT_ZONE_ID,
                                                              1,
                                                              samplePartitionKeysMap.get(1).get(0)));
        assertEquals("Replica owner should be 1",
                     1,
                     nonZonedBaseRoutingPlan.getNodeIdForZoneNary(Zone.DEFAULT_ZONE_ID,
                                                              0,
                                                              samplePartitionKeysMap.get(3).get(0)));
    }
    @After
    public void teardown() {

    }
}
TOP

Related Classes of voldemort.routing.StoreRoutingPlanTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.