You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by al...@apache.org on 2018/10/23 08:06:40 UTC
hbase git commit: HBASE-20973 ArrayIndexOutOfBoundsException when
rolling back procedure
Repository: hbase
Updated Branches:
refs/heads/branch-2.0 01d94d710 -> a31e71564
HBASE-20973 ArrayIndexOutOfBoundsException when rolling back procedure
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/a31e7156
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/a31e7156
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/a31e7156
Branch: refs/heads/branch-2.0
Commit: a31e71564fd5c276cef7b8381e5285b8703eef13
Parents: 01d94d7
Author: Allan Yang <al...@apache.org>
Authored: Tue Oct 23 16:06:19 2018 +0800
Committer: Allan Yang <al...@apache.org>
Committed: Tue Oct 23 16:06:19 2018 +0800
----------------------------------------------------------------------
.../procedure2/store/ProcedureStoreTracker.java | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/a31e7156/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.java
----------------------------------------------------------------------
diff --git a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.java b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.java
index 64479b2..9f99e26 100644
--- a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.java
+++ b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.java
@@ -376,6 +376,24 @@ public class ProcedureStoreTracker {
}
private BitSetNode getOrCreateNode(long procId) {
+ // See HBASE-20973, grow or merge can lead to ArrayIndexOutOfBoundsException
+ // The root cause is not revealed yet, disable grow or merge for now
+ return getOrCreateNodeNoGrowOrMerge(procId);
+ }
+
+ private BitSetNode getOrCreateNodeNoGrowOrMerge(long procId) {
+ Map.Entry<Long, BitSetNode> entry = map.floorEntry(procId);
+ if (entry != null && entry.getValue().contains(procId)) {
+ return entry.getValue();
+ } else {
+ BitSetNode node = new BitSetNode(procId, partial);
+ assert !map.containsKey(node.getStart());
+ map.put(node.getStart(), node);
+ return node;
+ }
+ }
+
+ private BitSetNode getOrCreateNodeWithGrowOrMerge(long procId) {
// If procId can fit in left node (directly or by growing it)
BitSetNode leftNode = null;
boolean leftCanGrow = false;