From 92e922e11ddfb3b4604e5f7095ecec5c296563ee Mon Sep 17 00:00:00 2001 From: Enis Soztutar Date: Fri, 17 Apr 2015 21:54:41 -0700 Subject: [PATCH] HBASE-13491 Issue in FuzzyRowFilter#getNextForFuzzyRule (Anoop Sam John) --- .../java/org/apache/hadoop/hbase/filter/FuzzyRowFilter.java | 5 +++-- .../org/apache/hadoop/hbase/filter/TestFuzzyRowFilter.java | 6 +++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FuzzyRowFilter.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FuzzyRowFilter.java index 9b99b710d73..bb5edf42cf5 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FuzzyRowFilter.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FuzzyRowFilter.java @@ -337,7 +337,8 @@ public class FuzzyRowFilter extends FilterBase { * @return greater byte array than given (row) which satisfies the fuzzy rule if it exists, * null otherwise */ - private static byte[] getNextForFuzzyRule(boolean reverse, byte[] row, int offset, int length, + @VisibleForTesting + static byte[] getNextForFuzzyRule(boolean reverse, byte[] row, int offset, int length, byte[] fuzzyKeyBytes, byte[] fuzzyKeyMeta) { // To find out the next "smallest" byte array that satisfies fuzzy rule and "greater" than // the given one we do the following: @@ -362,7 +363,7 @@ public class FuzzyRowFilter extends FilterBase { for (int i = 0; i < result.length; i++) { if (i >= fuzzyKeyMeta.length || fuzzyKeyMeta[i] == 1) { result[i] = row[offset + i]; - if (!order.isMax(row[i])) { + if (!order.isMax(row[offset + i])) { // this is "non-fixed" position and is not at max value, hence we can increase it toInc = i; } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestFuzzyRowFilter.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestFuzzyRowFilter.java index 3ec13511e41..f21fba599d0 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestFuzzyRowFilter.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestFuzzyRowFilter.java @@ -17,6 +17,8 @@ */ package org.apache.hadoop.hbase.filter; +import org.apache.hadoop.hbase.KeyValue; +import org.apache.hadoop.hbase.KeyValueUtil; import org.apache.hadoop.hbase.testclassification.FilterTests; import org.apache.hadoop.hbase.testclassification.SmallTests; import org.apache.hadoop.hbase.util.Bytes; @@ -401,7 +403,9 @@ public class TestFuzzyRowFilter { private static void assertNext(boolean reverse, byte[] fuzzyRow, byte[] mask, byte[] current, byte[] expected) { - byte[] nextForFuzzyRule = FuzzyRowFilter.getNextForFuzzyRule(reverse, current, fuzzyRow, mask); + KeyValue kv = KeyValueUtil.createFirstOnRow(current); + byte[] nextForFuzzyRule = FuzzyRowFilter.getNextForFuzzyRule(reverse, kv.getRowArray(), + kv.getRowOffset(), kv.getRowLength(), fuzzyRow, mask); Assert.assertEquals(Bytes.toStringBinary(expected), Bytes.toStringBinary(nextForFuzzyRule)); } }