Index: src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java (版本 1416829) +++ src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java (工作副本) @@ -494,6 +494,7 @@ private final Object masterLock = new Object(); private volatile boolean closed; private volatile boolean aborted; + private volatile boolean reseting; private volatile HMasterInterface master; // ZooKeeper reference private volatile ZooKeeperWatcher zooKeeper; @@ -505,6 +506,8 @@ 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 @@ HConstants.DEFAULT_HBASE_CLIENT_PREFETCH_LIMIT); this.master = null; + this.reseting = false; } private synchronized void ensureZookeeperTrackers() @@ -1678,7 +1682,12 @@ 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 (reseting) return; + this.reseting = true; + } resetZooKeeperTrackers(); + this.reseting = false; } return; }