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 &&