Repository: helix Updated Branches: refs/heads/master 993beb383 -> 8cd7aee6f
Use polling verifier instead of hard-coded sleep in tests to reduce test time. Project: http://git-wip-us.apache.org/repos/asf/helix/repo Commit: http://git-wip-us.apache.org/repos/asf/helix/commit/8cd7aee6 Tree: http://git-wip-us.apache.org/repos/asf/helix/tree/8cd7aee6 Diff: http://git-wip-us.apache.org/repos/asf/helix/diff/8cd7aee6 Branch: refs/heads/master Commit: 8cd7aee6fcc795f2849c55adf89ae320c320d465 Parents: 993beb3 Author: Lei Xia <[email protected]> Authored: Mon Jun 18 17:33:16 2018 -0700 Committer: Junkai Xue <[email protected]> Committed: Tue Jul 17 15:27:40 2018 -0700 ---------------------------------------------------------------------- .../TestAlertingRebalancerFailure.java | 4 +- .../integration/TestBatchEnableInstances.java | 4 +- .../integration/TestBatchMessageHandling.java | 2 +- .../integration/TestBucketizedResource.java | 22 ++-- .../controller/TestClusterMaintenanceMode.java | 9 +- .../rebalancer/TestAutoRebalance.java | 6 +- .../TestAutoRebalancePartitionLimit.java | 12 +-- .../TestAutoRebalanceWithDisabledInstance.java | 16 ++- .../handling/TestBatchMessageModeConfigs.java | 6 +- .../TestClusterStatusMonitorLifecycle.java | 105 +++++++++++++------ .../mbeans/TestClusterAggregateMetrics.java | 8 +- .../apache/helix/tools/TestHelixAdminCli.java | 15 +-- 12 files changed, 127 insertions(+), 82 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/helix/blob/8cd7aee6/helix-core/src/test/java/org/apache/helix/integration/TestAlertingRebalancerFailure.java ---------------------------------------------------------------------- diff --git a/helix-core/src/test/java/org/apache/helix/integration/TestAlertingRebalancerFailure.java b/helix-core/src/test/java/org/apache/helix/integration/TestAlertingRebalancerFailure.java index ed5be3d..e732c85 100644 --- a/helix-core/src/test/java/org/apache/helix/integration/TestAlertingRebalancerFailure.java +++ b/helix-core/src/test/java/org/apache/helix/integration/TestAlertingRebalancerFailure.java @@ -206,7 +206,9 @@ public class TestAlertingRebalancerFailure extends ZkStandAloneCMTestBase { setDomainId(_participants[i].getInstanceName(), configAccessor); } _gSetupTool.rebalanceStorageCluster(CLUSTER_NAME, testDb, replicas); - Thread.sleep(1000); + + Assert.assertTrue(_clusterVerifier.verify()); + // Verify that rebalance error state is removed checkRebalanceFailureGauge(false); http://git-wip-us.apache.org/repos/asf/helix/blob/8cd7aee6/helix-core/src/test/java/org/apache/helix/integration/TestBatchEnableInstances.java ---------------------------------------------------------------------- diff --git a/helix-core/src/test/java/org/apache/helix/integration/TestBatchEnableInstances.java b/helix-core/src/test/java/org/apache/helix/integration/TestBatchEnableInstances.java index 9861518..6a5a304 100644 --- a/helix-core/src/test/java/org/apache/helix/integration/TestBatchEnableInstances.java +++ b/helix-core/src/test/java/org/apache/helix/integration/TestBatchEnableInstances.java @@ -27,7 +27,7 @@ public class TestBatchEnableInstances extends TaskTestBase { public void testOldEnableDisable() throws InterruptedException { _gSetupTool.getClusterManagementTool() .enableInstance(CLUSTER_NAME, _participants[0].getInstanceName(), false); - Thread.sleep(2000); + Assert.assertTrue(_clusterVerifier.verify()); ExternalView externalView = _gSetupTool.getClusterManagementTool() .getResourceExternalView(CLUSTER_NAME, WorkflowGenerator.DEFAULT_TGT_DB); @@ -44,7 +44,7 @@ public class TestBatchEnableInstances extends TaskTestBase { _gSetupTool.getClusterManagementTool().enableInstance(CLUSTER_NAME, Arrays.asList(_participants[0].getInstanceName(), _participants[1].getInstanceName()), false); - Thread.sleep(2000); + Assert.assertTrue(_clusterVerifier.verifyByPolling()); ExternalView externalView = _gSetupTool.getClusterManagementTool() .getResourceExternalView(CLUSTER_NAME, WorkflowGenerator.DEFAULT_TGT_DB); http://git-wip-us.apache.org/repos/asf/helix/blob/8cd7aee6/helix-core/src/test/java/org/apache/helix/integration/TestBatchMessageHandling.java ---------------------------------------------------------------------- diff --git a/helix-core/src/test/java/org/apache/helix/integration/TestBatchMessageHandling.java b/helix-core/src/test/java/org/apache/helix/integration/TestBatchMessageHandling.java index d7c3a2d..713e1e4 100644 --- a/helix-core/src/test/java/org/apache/helix/integration/TestBatchMessageHandling.java +++ b/helix-core/src/test/java/org/apache/helix/integration/TestBatchMessageHandling.java @@ -57,7 +57,7 @@ public class TestBatchMessageHandling extends ZkStandAloneCMTestBase { _gSetupTool.getClusterManagementTool().addResource(CLUSTER_NAME, dbName, idealState); _gSetupTool.rebalanceStorageCluster(CLUSTER_NAME, dbName, 1); - Thread.sleep(1000L); + Assert.assertTrue(_clusterVerifier.verifyByPolling()); int numOfOnlines = 0; int numOfErrors = 0; http://git-wip-us.apache.org/repos/asf/helix/blob/8cd7aee6/helix-core/src/test/java/org/apache/helix/integration/TestBucketizedResource.java ---------------------------------------------------------------------- diff --git a/helix-core/src/test/java/org/apache/helix/integration/TestBucketizedResource.java b/helix-core/src/test/java/org/apache/helix/integration/TestBucketizedResource.java index 314c5bc..27a7729 100644 --- a/helix-core/src/test/java/org/apache/helix/integration/TestBucketizedResource.java +++ b/helix-core/src/test/java/org/apache/helix/integration/TestBucketizedResource.java @@ -231,7 +231,7 @@ public class TestBucketizedResource extends ZkTestBase { Assert.assertTrue(_clusterVerifier.verifyByPolling()); // add an external view listener - TestExternalViewListener listener = new TestExternalViewListener(); + final TestExternalViewListener listener = new TestExternalViewListener(); controller.addExternalViewChangeListener(listener); // remove "TestDB0" @@ -239,14 +239,13 @@ public class TestBucketizedResource extends ZkTestBase { Assert.assertTrue(_clusterVerifier.verifyByPolling()); // wait callback to finish - int waitTime =0; - do { - Thread.sleep(100); - waitTime += 100; - if (waitTime > 30000) { - break; + TestHelper.verify(new TestHelper.Verifier() { + @Override public boolean verify() throws Exception { + return listener.cbCnt > 0; } - } while (listener.cbCnt == 0); + }, 20000); + Assert.assertTrue(listener.cbCnt > 0); + listener.cbCnt = 0; // add a new db @@ -264,7 +263,12 @@ public class TestBucketizedResource extends ZkTestBase { Assert.assertTrue(_clusterVerifier.verifyByPolling()); - Thread.sleep(200); + TestHelper.verify(new TestHelper.Verifier() { + @Override public boolean verify() throws Exception { + return listener.cbCnt > 0; + } + }, 20000); + Assert.assertTrue(listener.cbCnt > 0); // clean up http://git-wip-us.apache.org/repos/asf/helix/blob/8cd7aee6/helix-core/src/test/java/org/apache/helix/integration/controller/TestClusterMaintenanceMode.java ---------------------------------------------------------------------- diff --git a/helix-core/src/test/java/org/apache/helix/integration/controller/TestClusterMaintenanceMode.java b/helix-core/src/test/java/org/apache/helix/integration/controller/TestClusterMaintenanceMode.java index daa3fc4..4e4771b 100644 --- a/helix-core/src/test/java/org/apache/helix/integration/controller/TestClusterMaintenanceMode.java +++ b/helix-core/src/test/java/org/apache/helix/integration/controller/TestClusterMaintenanceMode.java @@ -34,7 +34,6 @@ public class TestClusterMaintenanceMode extends TaskTestBase { @Test public void testMaintenanceModeAddNewInstance() throws InterruptedException { _gSetupTool.getClusterManagementTool().enableMaintenanceMode(CLUSTER_NAME, true, "Test"); - Thread.sleep(2000); ExternalView prevExternalView = _gSetupTool.getClusterManagementTool() .getResourceExternalView(CLUSTER_NAME, WorkflowGenerator.DEFAULT_TGT_DB); String instanceName = PARTICIPANT_PREFIX + "_" + (_startPort + 10); @@ -44,7 +43,7 @@ public class TestClusterMaintenanceMode extends TaskTestBase { _newInstance.syncStart(); _gSetupTool.getClusterManagementTool() .rebalance(CLUSTER_NAME, WorkflowGenerator.DEFAULT_TGT_DB, 3); - Thread.sleep(3000); + Assert.assertTrue(_clusterVerifier.verifyByPolling()); ExternalView newExternalView = _gSetupTool.getClusterManagementTool() .getResourceExternalView(CLUSTER_NAME, WorkflowGenerator.DEFAULT_TGT_DB); Assert.assertEquals(prevExternalView.getRecord().getMapFields(), @@ -58,7 +57,7 @@ public class TestClusterMaintenanceMode extends TaskTestBase { IdealState.RebalanceMode.FULL_AUTO.name()); _gSetupTool.getClusterManagementTool() .rebalance(CLUSTER_NAME, WorkflowGenerator.DEFAULT_TGT_DB + 1, 3); - Thread.sleep(2000); + Assert.assertTrue(_clusterVerifier.verifyByPolling()); ExternalView externalView = _gSetupTool.getClusterManagementTool() .getResourceExternalView(CLUSTER_NAME, WorkflowGenerator.DEFAULT_TGT_DB + 1); Assert.assertNull(externalView); @@ -67,7 +66,7 @@ public class TestClusterMaintenanceMode extends TaskTestBase { @Test (dependsOnMethods = "testMaintenanceModeAddNewResource") public void testMaintenanceModeInstanceDown() throws InterruptedException { _participants[0].syncStop(); - Thread.sleep(2000); + Assert.assertTrue(_clusterVerifier.verifyByPolling()); ExternalView externalView = _gSetupTool.getClusterManagementTool() .getResourceExternalView(CLUSTER_NAME, WorkflowGenerator.DEFAULT_TGT_DB); for (Map<String, String> stateMap : externalView.getRecord().getMapFields().values()) { @@ -80,7 +79,7 @@ public class TestClusterMaintenanceMode extends TaskTestBase { _participants[0] = new MockParticipantManager(ZK_ADDR, CLUSTER_NAME, _participants[0].getInstanceName()); _participants[0].syncStart(); - Thread.sleep(2000); + Assert.assertTrue(_clusterVerifier.verifyByPolling()); ExternalView externalView = _gSetupTool.getClusterManagementTool() .getResourceExternalView(CLUSTER_NAME, WorkflowGenerator.DEFAULT_TGT_DB); for (Map<String, String> stateMap : externalView.getRecord().getMapFields().values()) { http://git-wip-us.apache.org/repos/asf/helix/blob/8cd7aee6/helix-core/src/test/java/org/apache/helix/integration/rebalancer/TestAutoRebalance.java ---------------------------------------------------------------------- diff --git a/helix-core/src/test/java/org/apache/helix/integration/rebalancer/TestAutoRebalance.java b/helix-core/src/test/java/org/apache/helix/integration/rebalancer/TestAutoRebalance.java index 7c06e9d..7ad8358 100644 --- a/helix-core/src/test/java/org/apache/helix/integration/rebalancer/TestAutoRebalance.java +++ b/helix-core/src/test/java/org/apache/helix/integration/rebalancer/TestAutoRebalance.java @@ -157,10 +157,10 @@ public class TestAutoRebalance extends ZkStandAloneCMTestBase { new MockParticipantManager(ZK_ADDR, CLUSTER_NAME, storageNodeName.replace(':', '_')); participant.syncStart(); } - Thread.sleep(1000); + Thread.sleep(100); result = - ClusterStateVerifier.verifyByZkCallback(new ExternalViewBalancedVerifier(_gZkClient, - CLUSTER_NAME, TEST_DB)); + ClusterStateVerifier.verifyByPolling(new ExternalViewBalancedVerifier(_gZkClient, + CLUSTER_NAME, TEST_DB), 10000, 100); Assert.assertTrue(result); result = http://git-wip-us.apache.org/repos/asf/helix/blob/8cd7aee6/helix-core/src/test/java/org/apache/helix/integration/rebalancer/TestAutoRebalancePartitionLimit.java ---------------------------------------------------------------------- diff --git a/helix-core/src/test/java/org/apache/helix/integration/rebalancer/TestAutoRebalancePartitionLimit.java b/helix-core/src/test/java/org/apache/helix/integration/rebalancer/TestAutoRebalancePartitionLimit.java index a50e998..2527a66 100644 --- a/helix-core/src/test/java/org/apache/helix/integration/rebalancer/TestAutoRebalancePartitionLimit.java +++ b/helix-core/src/test/java/org/apache/helix/integration/rebalancer/TestAutoRebalancePartitionLimit.java @@ -76,10 +76,10 @@ public class TestAutoRebalancePartitionLimit extends ZkStandAloneCMTestBase { String instanceName = PARTICIPANT_PREFIX + "_" + (START_PORT + i); _participants[i] = new MockParticipantManager(ZK_ADDR, CLUSTER_NAME, instanceName); _participants[i].syncStart(); - Thread.sleep(2000); + Thread.sleep(100); boolean result = - ClusterStateVerifier.verifyByZkCallback(new ExternalViewBalancedVerifier(_gZkClient, - CLUSTER_NAME, TEST_DB)); + ClusterStateVerifier.verifyByPolling(new ExternalViewBalancedVerifier(_gZkClient, + CLUSTER_NAME, TEST_DB), 10000, 100); Assert.assertTrue(result); ExternalView ev = manager.getHelixDataAccessor().getProperty(accessor.keyBuilder().externalView(TEST_DB)); @@ -135,10 +135,10 @@ public class TestAutoRebalancePartitionLimit extends ZkStandAloneCMTestBase { participant.syncStart(); } - Thread.sleep(1000); + Thread.sleep(100); result = - ClusterStateVerifier.verifyByZkCallback(new ExternalViewBalancedVerifier(_gZkClient, - CLUSTER_NAME, TEST_DB)); + ClusterStateVerifier.verifyByPolling(new ExternalViewBalancedVerifier(_gZkClient, + CLUSTER_NAME, TEST_DB), 10000, 100); Assert.assertTrue(result); } http://git-wip-us.apache.org/repos/asf/helix/blob/8cd7aee6/helix-core/src/test/java/org/apache/helix/integration/rebalancer/TestAutoRebalanceWithDisabledInstance.java ---------------------------------------------------------------------- diff --git a/helix-core/src/test/java/org/apache/helix/integration/rebalancer/TestAutoRebalanceWithDisabledInstance.java b/helix-core/src/test/java/org/apache/helix/integration/rebalancer/TestAutoRebalanceWithDisabledInstance.java index 13e156f..60df196 100644 --- a/helix-core/src/test/java/org/apache/helix/integration/rebalancer/TestAutoRebalanceWithDisabledInstance.java +++ b/helix-core/src/test/java/org/apache/helix/integration/rebalancer/TestAutoRebalanceWithDisabledInstance.java @@ -45,12 +45,7 @@ public class TestAutoRebalanceWithDisabledInstance extends ZkStandAloneCMTestBas RebalanceMode.FULL_AUTO + ""); _gSetupTool.rebalanceResource(CLUSTER_NAME, TEST_DB_2, _replica); - Thread.sleep(2000); - - boolean result = - ClusterStateVerifier.verifyByZkCallback(new ClusterStateVerifier.BestPossAndExtViewZkVerifier(ZK_ADDR, - CLUSTER_NAME)); - Assert.assertTrue(result); + Assert.assertTrue(_clusterVerifier.verifyByPolling()); } @Test() @@ -71,7 +66,7 @@ public class TestAutoRebalanceWithDisabledInstance extends ZkStandAloneCMTestBas // disable instance _gSetupTool.getClusterManagementTool().enableInstance(CLUSTER_NAME, disabledInstance, false); - Thread.sleep(4000); + Assert.assertTrue(_clusterVerifier.verifyByPolling()); // TODO: preference list is not persisted in IS for full-auto, // Need a way to find how helix assigns partitions to nodes. @@ -85,7 +80,8 @@ public class TestAutoRebalanceWithDisabledInstance extends ZkStandAloneCMTestBas //enable instance _gSetupTool.getClusterManagementTool().enableInstance(CLUSTER_NAME, disabledInstance, true); - Thread.sleep(4000); + Assert.assertTrue(_clusterVerifier.verifyByPolling()); + // TODO: preference list is not persisted in IS for full-auto, // Need a way to find how helix assigns partitions to nodes. @@ -109,7 +105,7 @@ public class TestAutoRebalanceWithDisabledInstance extends ZkStandAloneCMTestBas participant.syncStart(); - Thread.sleep(2000); + Assert.assertTrue(_clusterVerifier.verifyByPolling()); // TODO: preference list is not persisted in IS for full-auto, // Need a way to find how helix assigns partitions to nodes. /* @@ -122,7 +118,7 @@ public class TestAutoRebalanceWithDisabledInstance extends ZkStandAloneCMTestBas //enable instance _gSetupTool.getClusterManagementTool().enableInstance(CLUSTER_NAME, nodeName, true); - Thread.sleep(2000); + Assert.assertTrue(_clusterVerifier.verifyByPolling()); // TODO: preference list is not persisted in IS for full-auto, // Need a way to find how helix assigns partitions to nodes. /* http://git-wip-us.apache.org/repos/asf/helix/blob/8cd7aee6/helix-core/src/test/java/org/apache/helix/messaging/handling/TestBatchMessageModeConfigs.java ---------------------------------------------------------------------- diff --git a/helix-core/src/test/java/org/apache/helix/messaging/handling/TestBatchMessageModeConfigs.java b/helix-core/src/test/java/org/apache/helix/messaging/handling/TestBatchMessageModeConfigs.java index 667e55d..2654aa9 100644 --- a/helix-core/src/test/java/org/apache/helix/messaging/handling/TestBatchMessageModeConfigs.java +++ b/helix-core/src/test/java/org/apache/helix/messaging/handling/TestBatchMessageModeConfigs.java @@ -40,7 +40,7 @@ public class TestBatchMessageModeConfigs extends ZkStandAloneCMTestBase { for (int i = 1; i < _participants.length; i++) { _participants[i].syncStop(); } - Thread.sleep(2000L); + Assert.assertTrue(_clusterVerifier.verifyByPolling()); } @Test @@ -49,7 +49,7 @@ public class TestBatchMessageModeConfigs extends ZkStandAloneCMTestBase { String dbName = TEST_DB_PREFIX + "Cluster"; setupResource(dbName); _gSetupTool.rebalanceStorageCluster(CLUSTER_NAME, dbName, 1); - Thread.sleep(2000L); + Assert.assertTrue(_clusterVerifier.verifyByPolling()); verify(); _gSetupTool.getClusterManagementTool().enableBatchMessageMode(CLUSTER_NAME, false); } @@ -60,7 +60,7 @@ public class TestBatchMessageModeConfigs extends ZkStandAloneCMTestBase { setupResource(dbName); _gSetupTool.getClusterManagementTool().enableBatchMessageMode(CLUSTER_NAME, dbName, true); _gSetupTool.rebalanceStorageCluster(CLUSTER_NAME, dbName, 1); - Thread.sleep(2000L); + Assert.assertTrue(_clusterVerifier.verifyByPolling()); verify(); _gSetupTool.getClusterManagementTool().enableBatchMessageMode(CLUSTER_NAME, dbName, false); } http://git-wip-us.apache.org/repos/asf/helix/blob/8cd7aee6/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 220d215..ffa1966 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 @@ -205,24 +205,29 @@ public class TestClusterStatusMonitorLifecycle extends ZkTestBase { } @Test - public void testClusterStatusMonitorLifecycle() - throws InstanceNotFoundException, MalformedObjectNameException, NullPointerException, - IOException, InterruptedException { + public void testClusterStatusMonitorLifecycle() throws Exception { // Filter other unrelated clusters' metrics - QueryExp exp = + final QueryExp exp1 = Query.match(Query.attr("SensorName"), Query.value("*" + _clusterNamePrefix + "*")); Set<ObjectInstance> mbeans = new HashSet<>(ManagementFactory.getPlatformMBeanServer() - .queryMBeans(new ObjectName("ClusterStatus:*"), exp)); + .queryMBeans(new ObjectName("ClusterStatus:*"), exp1)); _participants[0].disconnect(); // 1 participant goes away // No change in instance/resource mbean // Unregister 1 per-instance resource mbean and message queue mbean - Thread.sleep(1000); - int previousMBeanCount = mbeans.size(); + final int previousMBeanCount = mbeans.size(); + TestHelper.verify(new TestHelper.Verifier() { + @Override public boolean verify() throws Exception { + Set<ObjectInstance> newMbeans = new HashSet<>(ManagementFactory.getPlatformMBeanServer() + .queryMBeans(new ObjectName("ClusterStatus:*"), exp1)); + return newMbeans.size() == (previousMBeanCount - 2); + } + }, 4000); + mbeans = new HashSet<>(ManagementFactory.getPlatformMBeanServer() - .queryMBeans(new ObjectName("ClusterStatus:*"), exp)); + .queryMBeans(new ObjectName("ClusterStatus:*"), exp1)); Assert.assertEquals(mbeans.size(), previousMBeanCount - 2); HelixDataAccessor accessor = _participants[n - 1].getHelixDataAccessor(); @@ -239,11 +244,18 @@ public class TestClusterStatusMonitorLifecycle extends ZkTestBase { // 1 controller goes away // 1 message queue mbean, 1 PerInstanceResource mbean, and one message queue mbean - Thread.sleep(2000); - previousMBeanCount = mbeans.size(); + final int previousMBeanCount2 = mbeans.size(); + TestHelper.verify(new TestHelper.Verifier() { + @Override public boolean verify() throws Exception { + Set<ObjectInstance> newMbeans = new HashSet<>(ManagementFactory.getPlatformMBeanServer() + .queryMBeans(new ObjectName("ClusterStatus:*"), exp1)); + return newMbeans.size() == (previousMBeanCount2 - 3); + } + }, 4000); + mbeans = new HashSet<>(ManagementFactory.getPlatformMBeanServer() - .queryMBeans(new ObjectName("ClusterStatus:*"), exp)); - Assert.assertEquals(mbeans.size(), previousMBeanCount - 3); + .queryMBeans(new ObjectName("ClusterStatus:*"), exp1)); + Assert.assertEquals(mbeans.size(), previousMBeanCount2 - 3); String instanceName = "localhost0_" + (12918 + 0); _participants[0] = new MockParticipantManager(ZK_ADDR, _firstClusterName, instanceName); @@ -252,11 +264,18 @@ public class TestClusterStatusMonitorLifecycle extends ZkTestBase { // 1 participant comes back // No change in instance/resource mbean // Register 1 per-instance resource mbean and 1 message queue mbean - Thread.sleep(2000); - previousMBeanCount = mbeans.size(); + final int previousMBeanCount3 = mbeans.size(); + TestHelper.verify(new TestHelper.Verifier() { + @Override public boolean verify() throws Exception { + Set<ObjectInstance> newMbeans = new HashSet<>(ManagementFactory.getPlatformMBeanServer() + .queryMBeans(new ObjectName("ClusterStatus:*"), exp1)); + return newMbeans.size() == (previousMBeanCount3 + 2); + } + }, 4000); + mbeans = new HashSet<>(ManagementFactory.getPlatformMBeanServer() - .queryMBeans(new ObjectName("ClusterStatus:*"), exp)); - Assert.assertEquals(mbeans.size(), previousMBeanCount + 2); + .queryMBeans(new ObjectName("ClusterStatus:*"), exp1)); + Assert.assertEquals(mbeans.size(), previousMBeanCount3 + 2); // Add a resource // Register 1 resource mbean @@ -269,38 +288,60 @@ public class TestClusterStatusMonitorLifecycle extends ZkTestBase { setupTool.rebalanceResource(_firstClusterName, "TestDB1", Integer.parseInt(idealState.getReplicas())); - Thread.sleep(2000); // Add one resource, PerInstanceResource mbeans and 1 resource monitor - previousMBeanCount = mbeans.size(); + final int previousMBeanCount4 = mbeans.size(); + TestHelper.verify(new TestHelper.Verifier() { + @Override public boolean verify() throws Exception { + Set<ObjectInstance> newMbeans = new HashSet<>(ManagementFactory.getPlatformMBeanServer() + .queryMBeans(new ObjectName("ClusterStatus:*"), exp1)); + return newMbeans.size() == (previousMBeanCount4 + _participants.length + 1); + } + }, 4000); + mbeans = new HashSet<>(ManagementFactory.getPlatformMBeanServer() - .queryMBeans(new ObjectName("ClusterStatus:*"), exp)); - Assert.assertEquals(mbeans.size(), previousMBeanCount + _participants.length + 1); + .queryMBeans(new ObjectName("ClusterStatus:*"), exp1)); + Assert.assertEquals(mbeans.size(), previousMBeanCount4 + _participants.length + 1); // Remove a resource // No change in instance/resource mbean // Unregister 5 per-instance resource mbean setupTool.dropResourceFromCluster(_firstClusterName, "TestDB1"); - Thread.sleep(2000); - previousMBeanCount = mbeans.size(); + + final int previousMBeanCount5 = mbeans.size(); + TestHelper.verify(new TestHelper.Verifier() { + @Override public boolean verify() throws Exception { + Set<ObjectInstance> newMbeans = new HashSet<>(ManagementFactory.getPlatformMBeanServer() + .queryMBeans(new ObjectName("ClusterStatus:*"), exp1)); + return newMbeans.size() == (previousMBeanCount5 - (_participants.length + 1)); + } + }, 4000); + mbeans = new HashSet<>(ManagementFactory.getPlatformMBeanServer() - .queryMBeans(new ObjectName("ClusterStatus:*"), exp)); - Assert.assertEquals(mbeans.size(), previousMBeanCount - (_participants.length + 1)); + .queryMBeans(new ObjectName("ClusterStatus:*"), exp1)); + Assert.assertEquals(mbeans.size(), previousMBeanCount5 - (_participants.length + 1)); // Cleanup controllers then MBeans should all be removed. cleanupControllers(); - Thread.sleep(2000); - // Check if any MBeans leftover. // Note that MessageQueueStatus is not bound with controller only. So it will still exist. - exp = Query - .and(Query.not(Query.match(Query.attr("SensorName"), Query.value("MessageQueueStatus.*"))), - exp); + + final QueryExp exp2 = Query.and( + Query.not(Query.match(Query.attr("SensorName"), Query.value("MessageQueueStatus.*"))), + exp1); + + TestHelper.verify(new TestHelper.Verifier() { + @Override public boolean verify() throws Exception { + return ManagementFactory.getPlatformMBeanServer() + .queryMBeans(new ObjectName("ClusterStatus:*"), exp2).isEmpty(); + } + }, 4000); + if (!ManagementFactory.getPlatformMBeanServer() - .queryMBeans(new ObjectName("ClusterStatus:*"), exp).isEmpty()) { + .queryMBeans(new ObjectName("ClusterStatus:*"), exp2).isEmpty()) { System.out.println(ManagementFactory.getPlatformMBeanServer() - .queryMBeans(new ObjectName("ClusterStatus:*"), exp)); + .queryMBeans(new ObjectName("ClusterStatus:*"), exp2)); } Assert.assertTrue(ManagementFactory.getPlatformMBeanServer() - .queryMBeans(new ObjectName("ClusterStatus:*"), exp).isEmpty()); + .queryMBeans(new ObjectName("ClusterStatus:*"), exp2).isEmpty()); } } http://git-wip-us.apache.org/repos/asf/helix/blob/8cd7aee6/helix-core/src/test/java/org/apache/helix/monitoring/mbeans/TestClusterAggregateMetrics.java ---------------------------------------------------------------------- diff --git a/helix-core/src/test/java/org/apache/helix/monitoring/mbeans/TestClusterAggregateMetrics.java b/helix-core/src/test/java/org/apache/helix/monitoring/mbeans/TestClusterAggregateMetrics.java index ea7a680..2cd84fb 100644 --- a/helix-core/src/test/java/org/apache/helix/monitoring/mbeans/TestClusterAggregateMetrics.java +++ b/helix-core/src/test/java/org/apache/helix/monitoring/mbeans/TestClusterAggregateMetrics.java @@ -105,12 +105,12 @@ public class TestClusterAggregateMetrics extends ZkTestBase { _controller = new ClusterControllerManager(ZK_ADDR, CLUSTER_NAME, controllerName); _controller.syncStart(); - boolean result = ClusterStateVerifier.verifyByZkCallback( - new ClusterStateVerifier.MasterNbInExtViewVerifier(ZK_ADDR, CLUSTER_NAME)); + boolean result = ClusterStateVerifier.verifyByPolling( + new ClusterStateVerifier.MasterNbInExtViewVerifier(ZK_ADDR, CLUSTER_NAME), 10000, 100); Assert.assertTrue(result); - result = ClusterStateVerifier.verifyByZkCallback( - new ClusterStateVerifier.BestPossAndExtViewZkVerifier(ZK_ADDR, CLUSTER_NAME)); + result = ClusterStateVerifier.verifyByPolling( + new ClusterStateVerifier.BestPossAndExtViewZkVerifier(ZK_ADDR, CLUSTER_NAME), 10000, 100); Assert.assertTrue(result); // create cluster manager http://git-wip-us.apache.org/repos/asf/helix/blob/8cd7aee6/helix-core/src/test/java/org/apache/helix/tools/TestHelixAdminCli.java ---------------------------------------------------------------------- diff --git a/helix-core/src/test/java/org/apache/helix/tools/TestHelixAdminCli.java b/helix-core/src/test/java/org/apache/helix/tools/TestHelixAdminCli.java index afd24e3..fdab158 100644 --- a/helix-core/src/test/java/org/apache/helix/tools/TestHelixAdminCli.java +++ b/helix-core/src/test/java/org/apache/helix/tools/TestHelixAdminCli.java @@ -542,13 +542,16 @@ public class TestHelixAdminCli extends ZkTestBase { BaseDataAccessor<ZNRecord> baseAccessor = new ZkBaseDataAccessor<ZNRecord>(_gZkClient); HelixDataAccessor accessor = new ZKHelixDataAccessor(clusterName, baseAccessor); - String path = accessor.keyBuilder().controllerLeader().getPath(); - for (int i = 0; i < 10; i++) { - Thread.sleep(1000); - if (!_gZkClient.exists(path)) { - break; + final String path = accessor.keyBuilder().controllerLeader().getPath(); + TestHelper.verify(new TestHelper.Verifier() { + @Override public boolean verify() throws Exception { + if (!_gZkClient.exists(path)) { + return true; + } + return false; } - } + }, 5000); + Assert.assertFalse(_gZkClient.exists(path), "leader should be gone after deactivate the cluster");
