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;