Repository: phoenix Updated Branches: refs/heads/4.x-HBase-1.1 91638018e -> 81f5943ae
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/81f5943a Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/81f5943a Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/81f5943a Branch: refs/heads/4.x-HBase-1.1 Commit: 81f5943ae0317bdf9cd455bb129ce22a8a40959a Parents: 9163801 Author: Rajeshbabu Chintaguntla <[email protected]> Authored: Mon Jul 25 17:34:44 2016 +0530 Committer: Rajeshbabu Chintaguntla <[email protected]> Committed: Mon Jul 25 17:34:44 2016 +0530 ---------------------------------------------------------------------- .../regionserver/LocalIndexStoreFileScanner.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/phoenix/blob/81f5943a/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);
