Repository: phoenix
Updated Branches:
  refs/heads/4.x-HBase-1.0 be74b73fd -> 138dab9fb


PHOENIX-3098 Possible NegativeArraySizeException while scanning local indexes 
during regions merge(Rajeshbabu)


Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/138dab9f
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/138dab9f
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/138dab9f

Branch: refs/heads/4.x-HBase-1.0
Commit: 138dab9fb716731f46ec531a97e2014a7c2d4707
Parents: be74b73
Author: Rajeshbabu Chintaguntla <[email protected]>
Authored: Mon Jul 25 17:39:22 2016 +0530
Committer: Rajeshbabu Chintaguntla <[email protected]>
Committed: Mon Jul 25 17:39:22 2016 +0530

----------------------------------------------------------------------
 .../regionserver/LocalIndexStoreFileScanner.java  | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/phoenix/blob/138dab9f/phoenix-core/src/main/java/org/apache/hadoop/hbase/regionserver/LocalIndexStoreFileScanner.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/hadoop/hbase/regionserver/LocalIndexStoreFileScanner.java
 
b/phoenix-core/src/main/java/org/apache/hadoop/hbase/regionserver/LocalIndexStoreFileScanner.java
index 64ad868..3a80698 100644
--- 
a/phoenix-core/src/main/java/org/apache/hadoop/hbase/regionserver/LocalIndexStoreFileScanner.java
+++ 
b/phoenix-core/src/main/java/org/apache/hadoop/hbase/regionserver/LocalIndexStoreFileScanner.java
@@ -22,6 +22,7 @@ import java.util.Map.Entry;
 
 import org.apache.hadoop.hbase.Cell;
 import org.apache.hadoop.hbase.CellUtil;
+import org.apache.hadoop.hbase.HConstants;
 import org.apache.hadoop.hbase.KeyValue;
 import org.apache.hadoop.hbase.KeyValue.Type;
 import org.apache.hadoop.hbase.KeyValueUtil;
@@ -84,6 +85,23 @@ public class LocalIndexStoreFileScanner extends 
StoreFileScanner{
         return changedKv;
     }
 
+    /**
+     * Enforce seek all the time for local index store file scanner otherwise 
some times hbase
+     * might return fake kvs not in physical files.
+     */
+    @Override
+    public boolean requestSeek(Cell kv, boolean forward, boolean useBloom) 
throws IOException {
+        boolean requestSeek = super.requestSeek(kv, forward, useBloom);
+        if(requestSeek) {
+            Cell peek = super.peek();
+            if (Bytes.compareTo(kv.getRowArray(), kv.getRowOffset(), 
kv.getRowLength(),
+                peek.getRowArray(), peek.getRowOffset(), peek.getRowLength()) 
== 0) {
+                return forward ? reseek(kv): seek(kv);
+            }
+        }
+        return requestSeek;
+    }
+
     @Override
     public boolean seek(Cell key) throws IOException {
         return seekOrReseek(key, true);

Reply via email to