Repository: hbase
Updated Branches:
  refs/heads/branch-2 4fcc1ac7f -> 7a130dcc3


HBASE-20090 Properly handle Preconditions check failure in MemStoreFlusher.run


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/7a130dcc
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/7a130dcc
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/7a130dcc

Branch: refs/heads/branch-2
Commit: 7a130dcc334bbcf3cc0638646c37685a888db166
Parents: 4fcc1ac
Author: tedyu <yuzhih...@gmail.com>
Authored: Tue Mar 20 21:02:09 2018 -0700
Committer: Michael Stack <st...@apache.org>
Committed: Wed Mar 21 09:09:50 2018 -0700

----------------------------------------------------------------------
 .../apache/hadoop/hbase/regionserver/MemStoreFlusher.java | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/7a130dcc/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java
index 23321e8..1b7e0bc 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java
@@ -42,7 +42,6 @@ import org.apache.hadoop.hbase.DroppedSnapshotException;
 import org.apache.hadoop.hbase.HConstants;
 import org.apache.hadoop.hbase.client.RegionReplicaUtil;
 import org.apache.hadoop.hbase.regionserver.HRegion.FlushResult;
-import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;
 import org.apache.hadoop.hbase.trace.TraceUtil;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
@@ -253,8 +252,13 @@ class MemStoreFlusher implements FlushRequester {
           bestRegionReplicaSize = getMemStoreDataSize(bestRegionReplica);
       }
 
-      Preconditions.checkState(
-        (regionToFlush != null && regionToFlushSize > 0) || 
bestRegionReplicaSize > 0);
+      if ((regionToFlush == null || regionToFlushSize == 0) && 
bestRegionReplicaSize == 0) {
+        // A concurrency issue (such as splitting region) may happen such that 
the online region
+        // seen by getCopyOfOnlineRegionsSortedByXX() method is no longer 
eligible to
+        // getBiggestMemStoreRegion(). This means that we can come out of the 
loop
+        LOG.debug("Above memory mark but there is no flushable region");
+        return false;
+      }
 
       if (regionToFlush == null ||
           (bestRegionReplica != null &&

Reply via email to