From 40c45392b362d5abffe1dd59506964297eea5a20 Mon Sep 17 00:00:00 2001 From: Michael Stack Date: Wed, 14 Apr 2010 22:40:04 +0000 Subject: [PATCH] HBASE-2439 HBase can get stuck if updates to META are blocked git-svn-id: https://svn.apache.org/repos/asf/hadoop/hbase/trunk@934231 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 2 ++ .../java/org/apache/hadoop/hbase/regionserver/HRegion.java | 4 ++++ .../apache/hadoop/hbase/regionserver/MemStoreFlusher.java | 5 ++++- 3 files changed, 10 insertions(+), 1 deletion(-) 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());