You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@helix.apache.org by ka...@apache.org on 2014/07/16 22:34:53 UTC
git commit: [HELIX-471] Unregister ResourceMonitor on drop,
reduce test flakiness
Repository: helix
Updated Branches:
refs/heads/master f952cb760 -> e5e3a7d42
[HELIX-471] Unregister ResourceMonitor on drop, reduce test flakiness
Project: http://git-wip-us.apache.org/repos/asf/helix/repo
Commit: http://git-wip-us.apache.org/repos/asf/helix/commit/e5e3a7d4
Tree: http://git-wip-us.apache.org/repos/asf/helix/tree/e5e3a7d4
Diff: http://git-wip-us.apache.org/repos/asf/helix/diff/e5e3a7d4
Branch: refs/heads/master
Commit: e5e3a7d42e3f5b5f350bde91b12639a4795ccec5
Parents: f952cb7
Author: Kanak Biscuitwala <ka...@apache.org>
Authored: Wed Jul 16 13:34:20 2014 -0700
Committer: Kanak Biscuitwala <ka...@apache.org>
Committed: Wed Jul 16 13:34:20 2014 -0700
----------------------------------------------------------------------
.../mbeans/TestDropResourceMetricsReset.java | 49 +++++++++++++++++---
1 file changed, 42 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/helix/blob/e5e3a7d4/helix-core/src/test/java/org/apache/helix/monitoring/mbeans/TestDropResourceMetricsReset.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/org/apache/helix/monitoring/mbeans/TestDropResourceMetricsReset.java b/helix-core/src/test/java/org/apache/helix/monitoring/mbeans/TestDropResourceMetricsReset.java
index 7c4a094..17d45de 100644
--- a/helix-core/src/test/java/org/apache/helix/monitoring/mbeans/TestDropResourceMetricsReset.java
+++ b/helix-core/src/test/java/org/apache/helix/monitoring/mbeans/TestDropResourceMetricsReset.java
@@ -19,10 +19,14 @@ package org.apache.helix.monitoring.mbeans;
* under the License.
*/
-import java.lang.management.ManagementFactory;
+import java.io.IOException;
import java.util.Date;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+import javax.management.InstanceNotFoundException;
import javax.management.MBeanServerConnection;
+import javax.management.MBeanServerNotification;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
@@ -36,7 +40,8 @@ import org.testng.Assert;
import org.testng.annotations.Test;
public class TestDropResourceMetricsReset extends ZkUnitTestBase {
- private static final MBeanServerConnection SERVER = ManagementFactory.getPlatformMBeanServer();
+ private final CountDownLatch _registerLatch = new CountDownLatch(1);
+ private final CountDownLatch _unregisterLatch = new CountDownLatch(1);
@Test
public void testBasic() throws Exception {
@@ -50,6 +55,9 @@ public class TestDropResourceMetricsReset extends ZkUnitTestBase {
String clusterName = className + "_" + methodName;
System.out.println("START " + clusterName + " at " + new Date(System.currentTimeMillis()));
+ ParticipantMonitorListener listener =
+ new ParticipantMonitorListener("ClusterStatus", clusterName, RESOURCE_NAME);
+
// Set up cluster
TestHelper.setupCluster(clusterName, ZK_ADDR, 12918, // participant port
"localhost", // participant name prefix
@@ -74,18 +82,18 @@ public class TestDropResourceMetricsReset extends ZkUnitTestBase {
controller.syncStart();
// Verify that the bean was created
- Thread.sleep(2000);
- ObjectName objectName = getObjectName(RESOURCE_NAME, clusterName);
- Assert.assertTrue(SERVER.isRegistered(objectName));
+ boolean noTimeout = _registerLatch.await(30000, TimeUnit.MILLISECONDS);
+ Assert.assertTrue(noTimeout);
// Drop the resource
setupTool.dropResourceFromCluster(clusterName, RESOURCE_NAME);
// Verify that the bean was removed
- Thread.sleep(2000);
- Assert.assertFalse(SERVER.isRegistered(objectName));
+ noTimeout = _unregisterLatch.await(30000, TimeUnit.MILLISECONDS);
+ Assert.assertTrue(noTimeout);
// Clean up
+ listener.disconnect();
controller.syncStop();
for (MockParticipantManager participant : participants) {
participant.syncStop();
@@ -103,4 +111,31 @@ public class TestDropResourceMetricsReset extends ZkUnitTestBase {
return new ObjectName(String.format("%s: %s", ClusterStatusMonitor.CLUSTER_STATUS_KEY,
resourceBeanName));
}
+
+ private class ParticipantMonitorListener extends ClusterMBeanObserver {
+ private final ObjectName _objectName;
+
+ public ParticipantMonitorListener(String domain, String cluster, String resource)
+ throws InstanceNotFoundException, IOException, MalformedObjectNameException,
+ NullPointerException {
+ super(domain);
+ _objectName = getObjectName(resource, cluster);
+ }
+
+ @Override
+ public void onMBeanRegistered(MBeanServerConnection server,
+ MBeanServerNotification mbsNotification) {
+ if (mbsNotification.getMBeanName().equals(_objectName)) {
+ _registerLatch.countDown();
+ }
+ }
+
+ @Override
+ public void onMBeanUnRegistered(MBeanServerConnection server,
+ MBeanServerNotification mbsNotification) {
+ if (mbsNotification.getMBeanName().equals(_objectName)) {
+ _unregisterLatch.countDown();
+ }
+ }
+ }
}