Repository: hbase Updated Branches: refs/heads/branch-2 9c8c749cd -> 347bef8d3
HBASE-17678 FilterList with MUST_PASS_ONE lead to redundancy cells returned - addendum Signed-off-by: tedyu <yuzhih...@gmail.com> Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/347bef8d Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/347bef8d Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/347bef8d Branch: refs/heads/branch-2 Commit: 347bef8d336377ae38bb6c357da9d033ccba155c Parents: 9c8c749 Author: huzheng <open...@gmail.com> Authored: Wed Jun 7 14:49:29 2017 +0800 Committer: tedyu <yuzhih...@gmail.com> Committed: Wed Jun 7 07:35:03 2017 -0700 ---------------------------------------------------------------------- .../java/org/apache/hadoop/hbase/filter/FilterList.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/347bef8d/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FilterList.java ---------------------------------------------------------------------- diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FilterList.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FilterList.java index 985cb16..7433cca 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FilterList.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FilterList.java @@ -27,6 +27,7 @@ import java.util.List; import org.apache.hadoop.hbase.Cell; import org.apache.hadoop.hbase.CellComparator; import org.apache.hadoop.hbase.CellUtil; +import org.apache.hadoop.hbase.KeyValueUtil; import org.apache.hadoop.hbase.classification.InterfaceAudience; import org.apache.hadoop.hbase.exceptions.DeserializationException; import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil; @@ -144,7 +145,7 @@ final public class FilterList extends FilterBase { public void initPrevListForMustPassOne(int size) { if (operator == Operator.MUST_PASS_ONE) { - if (this.prevCellList == null) { + if (this.prevFilterRCList == null) { prevFilterRCList = new ArrayList<>(Collections.nCopies(size, null)); } if (this.prevCellList == null) { @@ -403,7 +404,14 @@ final public class FilterList extends FilterBase { ReturnCode localRC = filter.filterKeyValue(c); // Update previous cell and return code we encountered. prevFilterRCList.set(i, localRC); - prevCellList.set(i, c); + if (c == null || localRC == ReturnCode.INCLUDE || localRC == ReturnCode.SKIP) { + // If previous return code is INCLUDE or SKIP, we should always pass the next cell to the + // corresponding sub-filter(need not test shouldPassCurrentCellToFilter() method), So we + // need not save current cell to prevCellList for saving heap memory. + prevCellList.set(i, null); + } else { + prevCellList.set(i, KeyValueUtil.toNewKeyCell(c)); + } if (localRC != ReturnCode.SEEK_NEXT_USING_HINT) { seenNonHintReturnCode = true;