You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by la...@apache.org on 2012/12/20 00:48:40 UTC
svn commit: r1424233 -
/hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java
Author: larsh
Date: Wed Dec 19 23:48:40 2012
New Revision: 1424233
URL: http://svn.apache.org/viewvc?rev=1424233&view=rev
Log:
HBASE-7259 Deadlock in HBaseClient when KeeperException occured (liwei)
Modified:
hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java
Modified: hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java?rev=1424233&r1=1424232&r2=1424233&view=diff
==============================================================================
--- hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java (original)
+++ hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java Wed Dec 19 23:48:40 2012
@@ -494,6 +494,7 @@ public class HConnectionManager {
private final Object masterLock = new Object();
private volatile boolean closed;
private volatile boolean aborted;
+ private volatile boolean resetting;
private volatile HMasterInterface master;
// ZooKeeper reference
private volatile ZooKeeperWatcher zooKeeper;
@@ -505,6 +506,8 @@ public class HConnectionManager {
private final Object metaRegionLock = new Object();
private final Object userRegionLock = new Object();
+
+ private final Object resetLock = new Object();
private final Configuration conf;
// Known region HServerAddress.toString() -> HRegionInterface
@@ -573,6 +576,7 @@ public class HConnectionManager {
HConstants.DEFAULT_HBASE_CLIENT_PREFETCH_LIMIT);
this.master = null;
+ this.resetting = false;
}
private synchronized void ensureZookeeperTrackers()
@@ -1678,7 +1682,12 @@ public class HConnectionManager {
LOG.info("ZK session expired. This disconnect could have been" +
" caused by a network partition or a long-running GC pause," +
" either way it's recommended that you verify your environment.");
+ synchronized (resetLock) {
+ if (resetting) return;
+ this.resetting = true;
+ }
resetZooKeeperTrackers();
+ this.resetting = false;
}
return;
}