From 36675c81fb2803418191e44c7eb9560a92a23411 Mon Sep 17 00:00:00 2001 From: tedyu Date: Fri, 11 Sep 2015 16:04:31 -0700 Subject: [PATCH] HBASE-14397 PrefixFilter doesn't filter all remaining rows if the prefix is longer than rowkey being compared (Jianwei Cui) --- .../org/apache/hadoop/hbase/filter/PrefixFilter.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/PrefixFilter.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/PrefixFilter.java index 8a62b9b31f2..7e356738acc 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/PrefixFilter.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/PrefixFilter.java @@ -40,9 +40,11 @@ import com.google.protobuf.InvalidProtocolBufferException; @InterfaceAudience.Public @InterfaceStability.Stable public class PrefixFilter extends FilterBase { + public static final int MAX_SKIPPED_COMPARE_ROW_NUM = 100; protected byte [] prefix = null; protected boolean passedPrefix = false; protected boolean filterRow = true; + protected int skippedCompareRows = 0; public PrefixFilter(final byte [] prefix) { this.prefix = prefix; @@ -56,7 +58,12 @@ public class PrefixFilter extends FilterBase { if (firstRowCell == null || this.prefix == null) return true; int length = firstRowCell.getRowLength(); - if (length < prefix.length) return true; + if (length < prefix.length && skippedCompareRows < MAX_SKIPPED_COMPARE_ROW_NUM) { + ++skippedCompareRows; + return true; + } + skippedCompareRows = 0; + // if they are equal, return false => pass row // else return true, filter row // if we are passed the prefix, set flag