diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java index e620c60..a1fc80b 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java @@ -332,7 +332,7 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi static final long DEFAULT_ROW_PROCESSOR_TIMEOUT = 60 * 1000L; final ExecutorService rowProcessorExecutor = Executors.newCachedThreadPool(); - private final ConcurrentHashMap scannerReadPoints; + private final Map scannerReadPoints = new HashMap(); /** * The sequence ID that was encountered when this region was opened. @@ -381,10 +381,9 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi // We achieve this by synchronizing on the scannerReadPoints object. synchronized(scannerReadPoints) { minimumReadPoint = mvcc.getReadPoint(); - - for (Long readPoint: this.scannerReadPoints.values()) { - if (readPoint < minimumReadPoint) { - minimumReadPoint = readPoint; + for (Entry e: this.scannerReadPoints.entrySet()) { + if (e.getValue() < minimumReadPoint) { + minimumReadPoint = e.getValue(); } } } @@ -690,7 +689,6 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi this.rsServices = rsServices; this.threadWakeFrequency = conf.getLong(HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000); setHTableSpecificConf(); - this.scannerReadPoints = new ConcurrentHashMap(); this.busyWaitDuration = conf.getLong( "hbase.busy.wait.duration", DEFAULT_BUSY_WAIT_DURATION); @@ -6127,7 +6125,9 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi joinedHeap = null; } // no need to synchronize here. - scannerReadPoints.remove(this); + synchronized(scannerReadPoints) { + scannerReadPoints.remove(this); + } this.filterClosed = true; }