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
This commit is contained in:
Michael Stack 2010-04-14 22:40:04 +00:00
parent 4e37ace7c9
commit 40c45392b3
3 changed files with 10 additions and 1 deletions

View File

@ -269,6 +269,8 @@ Release 0.21.0 - Unreleased
HBASE-2346 Usage of FilterList slows down scans HBASE-2346 Usage of FilterList slows down scans
HBASE-2341 ZK settings for initLimit/syncLimit should not have been removed HBASE-2341 ZK settings for initLimit/syncLimit should not have been removed
from hbase-default.xml from hbase-default.xml
HBASE-2439 HBase can get stuck if updates to META are blocked
(Kannan Muthukkaruppan via Stack)
IMPROVEMENTS IMPROVEMENTS
HBASE-1760 Cleanup TODOs in HTable HBASE-1760 Cleanup TODOs in HTable

View File

@ -1444,6 +1444,10 @@ public class HRegion implements HConstants, HeapSize { // , Writable{
* the notify. * the notify.
*/ */
private void checkResources() { private void checkResources() {
// If catalog region, do not impose resource constraints or block updates.
if (this.getRegionInfo().isMetaRegion()) return;
boolean blocked = false; boolean blocked = false;
while (this.memstoreSize.get() > this.blockingMemStoreSize) { while (this.memstoreSize.get() > this.blockingMemStoreSize) {
requestFlush(); requestFlush();

View File

@ -221,7 +221,10 @@ class MemStoreFlusher extends Thread implements FlushRequester {
// queue if there's too many files. // queue if there's too many files.
if (removeFromQueue) { if (removeFromQueue) {
checkStoreFileCount(region); 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 " + LOG.warn("Region " + region.getRegionNameAsString() + " has too many " +
"store files, putting it back at the end of the flush queue."); "store files, putting it back at the end of the flush queue.");
server.compactSplitThread.compactionRequested(region, getName()); server.compactSplitThread.compactionRequested(region, getName());