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;
       }