diff --git a/CHANGES.txt b/CHANGES.txt index fa96139aa4f..262b735d956 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -269,6 +269,8 @@ Release 0.21.0 - Unreleased HBASE-2346 Usage of FilterList slows down scans HBASE-2341 ZK settings for initLimit/syncLimit should not have been removed from hbase-default.xml + HBASE-2439 HBase can get stuck if updates to META are blocked + (Kannan Muthukkaruppan via Stack) IMPROVEMENTS HBASE-1760 Cleanup TODOs in HTable diff --git a/core/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java b/core/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java index 03dfe594daa..2fd9f3c09d8 100644 --- a/core/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java +++ b/core/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java @@ -1444,6 +1444,10 @@ public class HRegion implements HConstants, HeapSize { // , Writable{ * the notify. */ private void checkResources() { + + // If catalog region, do not impose resource constraints or block updates. + if (this.getRegionInfo().isMetaRegion()) return; + boolean blocked = false; while (this.memstoreSize.get() > this.blockingMemStoreSize) { requestFlush(); diff --git a/core/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java b/core/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java index 7578446237e..7f63a610ec4 100644 --- a/core/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java +++ b/core/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java @@ -221,7 +221,10 @@ class MemStoreFlusher extends Thread implements FlushRequester { // queue if there's too many files. if (removeFromQueue) { checkStoreFileCount(region); - } else if (isTooManyStoreFiles(region)) { + } else if ((!region.getRegionInfo().isMetaRegion()) && + isTooManyStoreFiles(region)) { + // Note: We don't impose blockingStoreFiles constraint on meta regions + LOG.warn("Region " + region.getRegionNameAsString() + " has too many " + "store files, putting it back at the end of the flush queue."); server.compactSplitThread.compactionRequested(region, getName());