You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by st...@apache.org on 2013/05/15 17:33:59 UTC
svn commit: r1482905 -
/hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHCM.java
Author: stack
Date: Wed May 15 15:33:59 2013
New Revision: 1482905
URL: http://svn.apache.org/r1482905
Log:
HBASE-8535 Test for zk leak does not account for unsynchronized access to zk watcher
Modified:
hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHCM.java
Modified: hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHCM.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHCM.java?rev=1482905&r1=1482904&r2=1482905&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHCM.java (original)
+++ hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHCM.java Wed May 15 15:33:59 2013
@@ -832,31 +832,35 @@ public class TestHCM {
// use connection multiple times
for (int i = 0; i < 50; i++) {
HConnection c1 = null;
- try {
- c1 = HConnectionManager.getConnection(config);
- HTable table = new HTable(TABLE_NAME4, c1, pool);
- table.close();
- } catch (Exception e) {
- } finally {
- if (c1 != null) {
- if (c1.isClosed()) {
- // cannot use getZooKeeper as method instantiates watcher if null
- Field zkwField = c1.getClass().getDeclaredField("keepAliveZookeeper");
- zkwField.setAccessible(true);
- Object watcher = zkwField.get(c1);
+ try {
+ c1 = HConnectionManager.getConnection(config);
+ HTable table = new HTable(TABLE_NAME4, c1, pool);
+ table.close();
+ } catch (Exception e) {
+ } finally {
+ if (c1 != null) {
+ if (c1.isClosed()) {
+ // cannot use getZooKeeper as method instantiates watcher if null
+ Field zkwField = c1.getClass().getDeclaredField("keepAliveZookeeper");
+ zkwField.setAccessible(true);
+ Object watcher = zkwField.get(c1);
- if (watcher != null) {
- if (((ZooKeeperWatcher)watcher).getRecoverableZooKeeper().getState().isAlive()) {
+ if (watcher != null) {
+ if (((ZooKeeperWatcher)watcher).getRecoverableZooKeeper().getState().isAlive()) {
+ // non-synchronized access to watcher; sleep and check again in case zk connection
+ // hasn't been cleaned up yet.
+ Thread.sleep(50);
+ if (((ZooKeeperWatcher) watcher).getRecoverableZooKeeper().getState().isAlive()) {
pool.shutdownNow();
fail("Live zookeeper in closed connection");
}
}
}
- c1.close();
}
+ c1.close();
}
+ }
}
-
pool.shutdownNow();
}
}