diff --git a/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java b/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java index 8f4fde9..4fbbdbd 100644 --- a/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java +++ b/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java @@ -170,8 +170,10 @@ class MemStoreFlusher extends Thread implements FlushRequester { return false; } - HRegion regionToFlush; - if (bestAnyRegion.memstoreSize.get() > 2 * bestFlushableRegion.memstoreSize.get()) { + HRegion regionToFlush = bestAnyRegion; + // UNLESS.... bestFlushableRegion is twice as large as bestAnyRegion. + if (bestFlushableRegion != null && + 2 * bestFlushableRegion.memstoreSize.get() > bestAnyRegion.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,8 +185,6 @@ class MemStoreFlusher extends Thread implements FlushRequester { " vs best flushable region's " + StringUtils.humanReadableInt(bestFlushableRegion.memstoreSize.get()) + ". Choosing the bigger."); - regionToFlush = bestAnyRegion; - } else { regionToFlush = bestFlushableRegion; }