Repository: helix Updated Branches: refs/heads/helix-0.6.2-release 7e48570a2 -> c7b54e26b
[HELIX-378] Add instance gauges to ClusterStatusMonitor, fix test failure Project: http://git-wip-us.apache.org/repos/asf/helix/repo Commit: http://git-wip-us.apache.org/repos/asf/helix/commit/c7b54e26 Tree: http://git-wip-us.apache.org/repos/asf/helix/tree/c7b54e26 Diff: http://git-wip-us.apache.org/repos/asf/helix/diff/c7b54e26 Branch: refs/heads/helix-0.6.2-release Commit: c7b54e26bd1ed4341a95009b7e7ceef08fca6778 Parents: 7e48570 Author: Kanak Biscuitwala <[email protected]> Authored: Wed Feb 19 13:34:44 2014 -0800 Committer: Kanak Biscuitwala <[email protected]> Committed: Wed Feb 19 13:34:44 2014 -0800 ---------------------------------------------------------------------- .../controller/stages/ReadClusterDataStage.java | 7 +- .../TestClusterStatusMonitorLifecycle.java | 99 ++++++++++---------- 2 files changed, 56 insertions(+), 50 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/helix/blob/c7b54e26/helix-core/src/main/java/org/apache/helix/controller/stages/ReadClusterDataStage.java ---------------------------------------------------------------------- diff --git a/helix-core/src/main/java/org/apache/helix/controller/stages/ReadClusterDataStage.java b/helix-core/src/main/java/org/apache/helix/controller/stages/ReadClusterDataStage.java index 3633e5e..abce878 100644 --- a/helix-core/src/main/java/org/apache/helix/controller/stages/ReadClusterDataStage.java +++ b/helix-core/src/main/java/org/apache/helix/controller/stages/ReadClusterDataStage.java @@ -19,6 +19,8 @@ package org.apache.helix.controller.stages; * under the License. */ +import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Set; @@ -78,7 +80,10 @@ public class ReadClusterDataStage extends AbstractBaseStage { if (!config.getInstanceEnabled()) { disabledInstanceSet.add(instanceName); } - Set<String> partitionNames = Sets.newHashSet(config.getDisabledPartitions()); + List<String> disabledPartitionsList = config.getDisabledPartitions(); + Set<String> partitionNames = + disabledPartitionsList != null ? new HashSet<String>(config.getDisabledPartitions()) + : new HashSet<String>(); disabledPartitions.put(instanceName, partitionNames); Set<String> instanceTags = Sets.newHashSet(config.getTags()); tags.put(instanceName, instanceTags); http://git-wip-us.apache.org/repos/asf/helix/blob/c7b54e26/helix-core/src/test/java/org/apache/helix/monitoring/TestClusterStatusMonitorLifecycle.java ---------------------------------------------------------------------- diff --git a/helix-core/src/test/java/org/apache/helix/monitoring/TestClusterStatusMonitorLifecycle.java b/helix-core/src/test/java/org/apache/helix/monitoring/TestClusterStatusMonitorLifecycle.java index 65d60fb..45bc709 100644 --- a/helix-core/src/test/java/org/apache/helix/monitoring/TestClusterStatusMonitorLifecycle.java +++ b/helix-core/src/test/java/org/apache/helix/monitoring/TestClusterStatusMonitorLifecycle.java @@ -10,7 +10,6 @@ import javax.management.MalformedObjectNameException; import org.apache.helix.HelixDataAccessor; import org.apache.helix.TestHelper; -import org.apache.helix.integration.TestDistributedCMMain; import org.apache.helix.integration.ZkIntegrationTestBase; import org.apache.helix.integration.manager.ClusterDistributedController; import org.apache.helix.integration.manager.MockParticipantManager; @@ -24,25 +23,25 @@ import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; -public class TestClusterStatusMonitorLifecycle extends ZkIntegrationTestBase{ +public class TestClusterStatusMonitorLifecycle extends ZkIntegrationTestBase { MockParticipantManager[] _participants; ClusterDistributedController[] _controllers; String _controllerClusterName; String _clusterNamePrefix; String _firstClusterName; - + final int n = 5; final int clusterNb = 10; - + @BeforeClass public void beforeClass() throws Exception { String className = TestHelper.getTestClassName(); String methodName = TestHelper.getTestMethodName(); _clusterNamePrefix = className + "_" + methodName; - System.out - .println("START " + _clusterNamePrefix + " at " + new Date(System.currentTimeMillis())); + System.out.println("START " + _clusterNamePrefix + " at " + + new Date(System.currentTimeMillis())); // setup 10 clusters for (int i = 0; i < clusterNb; i++) { @@ -62,7 +61,7 @@ public class TestClusterStatusMonitorLifecycle extends ZkIntegrationTestBase{ // setup controller cluster _controllerClusterName = "CONTROLLER_" + _clusterNamePrefix; TestHelper.setupCluster("CONTROLLER_" + _clusterNamePrefix, ZK_ADDR, 0, // controller - // port + // port "controller", // participant name prefix _clusterNamePrefix, // resource name prefix 1, // resources @@ -125,9 +124,9 @@ public class TestClusterStatusMonitorLifecycle extends ZkIntegrationTestBase{ _firstClusterName)); Assert.assertTrue(result, "first cluster NOT in ideal state"); } - + @AfterClass - public void afterClass(){ + public void afterClass() { System.out.println("Cleaning up..."); for (int i = 0; i < 5; i++) { boolean result = @@ -144,13 +143,13 @@ public class TestClusterStatusMonitorLifecycle extends ZkIntegrationTestBase{ System.out.println("END " + _clusterNamePrefix + " at " + new Date(System.currentTimeMillis())); } - + class ParticipantMonitorListener extends ClusterMBeanObserver { - + int _nMbeansUnregistered = 0; int _nMbeansRegistered = 0; - public ParticipantMonitorListener(String domain) - throws InstanceNotFoundException, IOException, + + public ParticipantMonitorListener(String domain) throws InstanceNotFoundException, IOException, MalformedObjectNameException, NullPointerException { super(domain); } @@ -158,73 +157,75 @@ public class TestClusterStatusMonitorLifecycle extends ZkIntegrationTestBase{ @Override public void onMBeanRegistered(MBeanServerConnection server, MBeanServerNotification mbsNotification) { - _nMbeansRegistered ++; + _nMbeansRegistered++; } @Override public void onMBeanUnRegistered(MBeanServerConnection server, MBeanServerNotification mbsNotification) { _nMbeansUnregistered++; - }} - + } + } + @Test - public void testClusterStatusMonitorLifecycle() throws InstanceNotFoundException, MalformedObjectNameException, NullPointerException, IOException, InterruptedException{ + public void testClusterStatusMonitorLifecycle() throws InstanceNotFoundException, + MalformedObjectNameException, NullPointerException, IOException, InterruptedException { ParticipantMonitorListener listener = new ParticipantMonitorListener("ClusterStatus"); - + int nMbeansUnregistered = listener._nMbeansUnregistered; int nMbeansRegistered = listener._nMbeansRegistered; - + _participants[0].disconnect(); - // participant goes away. should be no change + // participant goes away. should be no change in number of beans as config is still present Thread.sleep(1000); Assert.assertTrue(nMbeansUnregistered == listener._nMbeansUnregistered); Assert.assertTrue(nMbeansRegistered == listener._nMbeansRegistered); - - HelixDataAccessor accessor = _participants[n-1].getHelixDataAccessor(); - String firstControllerName = accessor.getProperty(accessor.keyBuilder().controllerLeader()).getId(); - + + HelixDataAccessor accessor = _participants[n - 1].getHelixDataAccessor(); + String firstControllerName = + accessor.getProperty(accessor.keyBuilder().controllerLeader()).getId(); + ClusterDistributedController firstController = null; - for(ClusterDistributedController controller : _controllers) - { - if(controller.getInstanceName().equals(firstControllerName)) - { + for (ClusterDistributedController controller : _controllers) { + if (controller.getInstanceName().equals(firstControllerName)) { firstController = controller; } } firstController.disconnect(); Thread.sleep(1000); - - // 1 cluster status monitor and 1 resource monitor - Assert.assertTrue(nMbeansUnregistered == listener._nMbeansUnregistered - 2); - Assert.assertTrue(nMbeansRegistered == listener._nMbeansRegistered - 2); - + + // 1 cluster status monitor, 1 resource monitor, 5 instances + Assert.assertTrue(nMbeansUnregistered == listener._nMbeansUnregistered - 7); + Assert.assertTrue(nMbeansRegistered == listener._nMbeansRegistered - 7); + String instanceName = "localhost0_" + (12918 + 0); _participants[0] = new MockParticipantManager(ZK_ADDR, _firstClusterName, instanceName); _participants[0].syncStart(); - + // participant goes back. should be no change Thread.sleep(1000); - Assert.assertTrue(nMbeansUnregistered == listener._nMbeansUnregistered - 2); - Assert.assertTrue(nMbeansRegistered == listener._nMbeansRegistered - 2); - + Assert.assertTrue(nMbeansUnregistered == listener._nMbeansUnregistered - 7); + Assert.assertTrue(nMbeansRegistered == listener._nMbeansRegistered - 7); + // Add a resource, one more mbean registered ClusterSetup setupTool = new ClusterSetup(ZK_ADDR); IdealState idealState = accessor.getProperty(accessor.keyBuilder().idealStates("TestDB00")); - - setupTool.addResourceToCluster(_firstClusterName, "TestDB1", idealState.getNumPartitions(), "MasterSlave"); - setupTool.rebalanceResource(_firstClusterName, "TestDB1", Integer.parseInt(idealState.getReplicas())); - + + setupTool.addResourceToCluster(_firstClusterName, "TestDB1", idealState.getNumPartitions(), + "MasterSlave"); + setupTool.rebalanceResource(_firstClusterName, "TestDB1", + Integer.parseInt(idealState.getReplicas())); + Thread.sleep(1000); - Assert.assertTrue(nMbeansUnregistered == listener._nMbeansUnregistered - 2); - Assert.assertTrue(nMbeansRegistered == listener._nMbeansRegistered - 3); - + Assert.assertTrue(nMbeansUnregistered == listener._nMbeansUnregistered - 7); + Assert.assertTrue(nMbeansRegistered == listener._nMbeansRegistered - 8); + // remove resource, no change setupTool.dropResourceFromCluster(_firstClusterName, "TestDB1"); Thread.sleep(1000); - Assert.assertTrue(nMbeansUnregistered == listener._nMbeansUnregistered - 2); - Assert.assertTrue(nMbeansRegistered == listener._nMbeansRegistered - 3); - - + Assert.assertTrue(nMbeansUnregistered == listener._nMbeansUnregistered - 7); + Assert.assertTrue(nMbeansRegistered == listener._nMbeansRegistered - 8); + } -} \ No newline at end of file +}
