HBASE-13491 Issue in FuzzyRowFilter#getNextForFuzzyRule (Anoop Sam John)

This commit is contained in:
Enis Soztutar 2015-04-17 21:56:04 -07:00
parent 49bf9aec8b
commit 60c30c707c
2 changed files with 8 additions and 3 deletions

View File

@ -348,7 +348,8 @@ public class FuzzyRowFilter extends FilterBase {
* @return greater byte array than given (row) which satisfies the fuzzy rule if it exists, * @return greater byte array than given (row) which satisfies the fuzzy rule if it exists,
* null otherwise * 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) { byte[] fuzzyKeyBytes, byte[] fuzzyKeyMeta) {
// To find out the next "smallest" byte array that satisfies fuzzy rule and "greater" than // To find out the next "smallest" byte array that satisfies fuzzy rule and "greater" than
// the given one we do the following: // the given one we do the following:
@ -373,7 +374,7 @@ public class FuzzyRowFilter extends FilterBase {
for (int i = 0; i < result.length; i++) { for (int i = 0; i < result.length; i++) {
if (i >= fuzzyKeyMeta.length || fuzzyKeyMeta[i] == 1) { if (i >= fuzzyKeyMeta.length || fuzzyKeyMeta[i] == 1) {
result[i] = row[offset + i]; 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 // this is "non-fixed" position and is not at max value, hence we can increase it
toInc = i; toInc = i;
} }

View File

@ -17,6 +17,8 @@
*/ */
package org.apache.hadoop.hbase.filter; package org.apache.hadoop.hbase.filter;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.KeyValueUtil;
import org.apache.hadoop.hbase.testclassification.SmallTests; import org.apache.hadoop.hbase.testclassification.SmallTests;
import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.util.Bytes;
import org.junit.Assert; import org.junit.Assert;
@ -400,7 +402,9 @@ public class TestFuzzyRowFilter {
private static void assertNext(boolean reverse, byte[] fuzzyRow, byte[] mask, byte[] current, private static void assertNext(boolean reverse, byte[] fuzzyRow, byte[] mask, byte[] current,
byte[] expected) { 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)); Assert.assertEquals(Bytes.toStringBinary(expected), Bytes.toStringBinary(nextForFuzzyRule));
} }
} }