@Test() public void testAutoRebalance() throws Exception { // kill 1 node String instanceName = PARTICIPANT_PREFIX + "_" + (START_PORT + 0); _startCMResultMap.get(instanceName)._manager.disconnect(); Thread.currentThread().sleep(1000); _startCMResultMap.get(instanceName)._thread.interrupt(); // verifyBalanceExternalView(); boolean result = ClusterStateVerifier.verifyByZkCallback( new ExternalViewBalancedVerifier(_zkClient, CLUSTER_NAME, TEST_DB)); Assert.assertTrue(result); // add 2 nodes for (int i = 0; i < 2; i++) { String storageNodeName = PARTICIPANT_PREFIX + ":" + (1000 + i); _setupTool.addInstanceToCluster(CLUSTER_NAME, storageNodeName); StartCMResult resultx = TestHelper.startDummyProcess(ZK_ADDR, CLUSTER_NAME, storageNodeName.replace(':', '_')); _startCMResultMap.put(storageNodeName, resultx); } Thread.sleep(1000); result = ClusterStateVerifier.verifyByZkCallback( new ExternalViewBalancedVerifier(_zkClient, CLUSTER_NAME, TEST_DB)); Assert.assertTrue(result); }
@Test public void testNullReplica() throws Exception { // Logger.getRootLogger().setLevel(Level.INFO); String className = TestHelper.getTestClassName(); String methodName = TestHelper.getTestMethodName(); String clusterName = className + "_" + methodName; System.out.println("START " + clusterName + " at " + new Date(System.currentTimeMillis())); MockParticipant[] participants = new MockParticipant[5]; TestHelper.setupCluster( clusterName, ZK_ADDR, 12918, // participant port "localhost", // participant name prefix "TestDB", // resource name prefix 1, // resources 10, // partitions per resource 5, // number of nodes 3, // replicas "MasterSlave", true); // do rebalance // set replica in ideal state to null String idealStatePath = PropertyPathConfig.getPath(PropertyType.IDEALSTATES, clusterName, "TestDB0"); ZNRecord idealState = _gZkClient.readData(idealStatePath); idealState.getSimpleFields().remove(IdealState.IdealStateProperty.REPLICAS.toString()); _gZkClient.writeData(idealStatePath, idealState); ClusterController controller = new ClusterController(clusterName, "controller_0", ZK_ADDR); controller.syncStart(); // start participants for (int i = 0; i < 5; i++) { String instanceName = "localhost_" + (12918 + i); participants[i] = new MockParticipant(clusterName, instanceName, ZK_ADDR, null); participants[i].syncStart(); } boolean result = ClusterStateVerifier.verifyByZkCallback( new BestPossAndExtViewZkVerifier(ZK_ADDR, clusterName)); Assert.assertTrue(result); // clean up for (int i = 0; i < 5; i++) { participants[i].syncStop(); } Thread.sleep(2000); controller.syncStop(); System.out.println("END " + clusterName + " at " + new Date(System.currentTimeMillis())); }
@Override @BeforeClass public void beforeClass() throws Exception { // Logger.getRootLogger().setLevel(Level.INFO); System.out.println("START " + CLASS_NAME + " at " + new Date(System.currentTimeMillis())); _zkClient = new ZkClient(ZK_ADDR); _zkClient.setZkSerializer(new ZNRecordSerializer()); String namespace = "/" + CLUSTER_NAME; if (_zkClient.exists(namespace)) { _zkClient.deleteRecursive(namespace); } _setupTool = new ClusterSetup(ZK_ADDR); // setup storage cluster _setupTool.addCluster(CLUSTER_NAME, true); _setupTool.addResourceToCluster( CLUSTER_NAME, TEST_DB, _PARTITIONS, "LeaderStandby", IdealStateModeProperty.AUTO_REBALANCE + ""); for (int i = 0; i < NODE_NR; i++) { String storageNodeName = PARTICIPANT_PREFIX + ":" + (START_PORT + i); _setupTool.addInstanceToCluster(CLUSTER_NAME, storageNodeName); } _setupTool.rebalanceStorageCluster(CLUSTER_NAME, TEST_DB, 1); // start dummy participants for (int i = 0; i < NODE_NR; i++) { String instanceName = PARTICIPANT_PREFIX + "_" + (START_PORT + i); if (_startCMResultMap.get(instanceName) != null) { LOG.error( "fail to start particpant:" + instanceName + "(participant with same name already exists)"); } else { StartCMResult result = TestHelper.startDummyProcess(ZK_ADDR, CLUSTER_NAME, instanceName); _startCMResultMap.put(instanceName, result); } } // start controller String controllerName = CONTROLLER_PREFIX + "_0"; StartCMResult startResult = TestHelper.startController( CLUSTER_NAME, controllerName, ZK_ADDR, HelixControllerMain.STANDALONE); _startCMResultMap.put(controllerName, startResult); boolean result = ClusterStateVerifier.verifyByZkCallback( new ExternalViewBalancedVerifier(_zkClient, CLUSTER_NAME, TEST_DB)); Assert.assertTrue(result); }