diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java index 23321e8..df9aba8 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java @@ -391,18 +391,24 @@ class MemStoreFlusher implements FlushRequester { Set excludedRegions, boolean checkStoreFileCount) { synchronized (regionsInQueue) { - for (HRegion region : regionsBySize.values()) { + for (Map.Entry entry : regionsBySize.entrySet()) { + HRegion region = entry.getValue(); if (excludedRegions.contains(region)) { continue; } if (region.writestate.flushing || !region.writestate.writesEnabled) { + excludedRegions.add(region); continue; } if (checkStoreFileCount && isTooManyStoreFiles(region)) { continue; } + if (entry.getKey() == 0) { + // reached the last entry in the Map + return null; + } return region; } } @@ -412,7 +418,8 @@ class MemStoreFlusher implements FlushRequester { private HRegion getBiggestMemStoreOfRegionReplica(SortedMap regionsBySize, Set excludedRegions) { synchronized (regionsInQueue) { - for (HRegion region : regionsBySize.values()) { + for (Map.Entry entry : regionsBySize.entrySet()) { + HRegion region = entry.getValue(); if (excludedRegions.contains(region)) { continue; } @@ -420,7 +427,10 @@ class MemStoreFlusher implements FlushRequester { if (RegionReplicaUtil.isDefaultReplica(region.getRegionInfo())) { continue; } - + if (entry.getKey() == 0) { + // reached the last entry in the Map + return null; + } return region; } }