You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ra...@apache.org on 2011/03/16 00:03:48 UTC
svn commit: r1081985 - in /hbase/branches/0.90: CHANGES.txt
src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java
Author: rawson
Date: Tue Mar 15 23:03:48 2011
New Revision: 1081985
URL: http://svn.apache.org/viewvc?rev=1081985&view=rev
Log:
HBASE-3613 NPE in MemStoreFlusher
Modified:
hbase/branches/0.90/CHANGES.txt
hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java
Modified: hbase/branches/0.90/CHANGES.txt
URL: http://svn.apache.org/viewvc/hbase/branches/0.90/CHANGES.txt?rev=1081985&r1=1081984&r2=1081985&view=diff
==============================================================================
--- hbase/branches/0.90/CHANGES.txt (original)
+++ hbase/branches/0.90/CHANGES.txt Tue Mar 15 23:03:48 2011
@@ -30,6 +30,7 @@ Release 0.90.2 - February 9th, 2011
ROWCOL bloomfilter (Liyin Tang via Stack)
HBASE-3639 FSUtils.getRootDir should qualify path
HBASE-3648 [replication] failover is sloppy with znodes
+ HBASE-3613 NPE in MemStoreFlusher
IMPROVEMENTS
HBASE-3542 MultiGet methods in Thrift
Modified: hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java?rev=1081985&r1=1081984&r2=1081985&view=diff
==============================================================================
--- hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java (original)
+++ hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java Tue Mar 15 23:03:48 2011
@@ -159,6 +159,7 @@ class MemStoreFlusher extends Thread imp
boolean flushedOne = false;
while (!flushedOne) {
// Find the biggest region that doesn't have too many storefiles
+ // (might be null!)
HRegion bestFlushableRegion = getBiggestMemstoreRegion(
regionsBySize, excludedRegionNames, true);
// Find the biggest region, total, even if it might have too many flushes.
@@ -166,12 +167,13 @@ class MemStoreFlusher extends Thread imp
regionsBySize, excludedRegionNames, false);
if (bestAnyRegion == null) {
- LOG.fatal("Above memory mark but there are no flushable regions!");
+ LOG.error("Above memory mark but there are no flushable regions!");
return false;
}
HRegion regionToFlush;
- if (bestAnyRegion.memstoreSize.get() > 2 * bestFlushableRegion.memstoreSize.get()) {
+ if (bestFlushableRegion != null &&
+ bestAnyRegion.memstoreSize.get() > 2 * bestFlushableRegion.memstoreSize.get()) {
// Even if it's not supposed to be flushed, pick a region if it's more than twice
// as big as the best flushable one - otherwise when we're under pressure we make
// lots of little flushes and cause lots of compactions, etc, which just makes
@@ -183,9 +185,13 @@ class MemStoreFlusher extends Thread imp
" vs best flushable region's " +
StringUtils.humanReadableInt(bestFlushableRegion.memstoreSize.get()) +
". Choosing the bigger.");
- regionToFlush = bestAnyRegion;
+ regionToFlush = bestAnyRegion;
} else {
- regionToFlush = bestFlushableRegion;
+ if (bestFlushableRegion == null) {
+ regionToFlush = bestAnyRegion;
+ } else {
+ regionToFlush = bestFlushableRegion;
+ }
}
Preconditions.checkState(regionToFlush.memstoreSize.get() > 0);