From f62345b3655a87f16049804581d7448acea40f86 Mon Sep 17 00:00:00 2001 From: CHIA-PING TSAI Date: Thu, 13 Apr 2017 14:11:41 +0800 Subject: [PATCH] HBASE-17890 FuzzyRow tests fail if unaligned support is false --- .../apache/hadoop/hbase/filter/FuzzyRowFilter.java | 26 ++++----- .../hadoop/hbase/filter/TestFuzzyRowFilter.java | 68 ++++++++++++---------- 2 files changed, 48 insertions(+), 46 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 838e4bda7b..de1c04cac0 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 @@ -60,7 +60,8 @@ import com.google.protobuf.InvalidProtocolBufferException; @InterfaceAudience.Public @InterfaceStability.Evolving public class FuzzyRowFilter extends FilterBase { - private static final boolean UNSAFE_UNALIGNED = UnsafeAvailChecker.unaligned(); + @VisibleForTesting + static final boolean UNSAFE_UNALIGNED = UnsafeAvailChecker.unaligned(); private List> fuzzyKeysData; private boolean done = false; @@ -310,24 +311,18 @@ public class FuzzyRowFilter extends FilterBase { NO_NEXT } - @VisibleForTesting - static SatisfiesCode satisfies(byte[] row, byte[] fuzzyKeyBytes, byte[] fuzzyKeyMeta) { - return satisfies(false, row, 0, row.length, fuzzyKeyBytes, fuzzyKeyMeta); - } - - @VisibleForTesting - static SatisfiesCode satisfies(boolean reverse, byte[] row, byte[] fuzzyKeyBytes, - byte[] fuzzyKeyMeta) { - return satisfies(reverse, row, 0, row.length, fuzzyKeyBytes, fuzzyKeyMeta); - } - - static SatisfiesCode satisfies(boolean reverse, byte[] row, int offset, int length, + private static SatisfiesCode satisfies(boolean reverse, byte[] row, int offset, int length, byte[] fuzzyKeyBytes, byte[] fuzzyKeyMeta) { - - if (!UNSAFE_UNALIGNED) { + if (UNSAFE_UNALIGNED) { + return satisfiesUnsafe(reverse, row, offset, length, fuzzyKeyBytes, fuzzyKeyMeta); + } else { return satisfiesNoUnsafe(reverse, row, offset, length, fuzzyKeyBytes, fuzzyKeyMeta); } + } + @VisibleForTesting + static SatisfiesCode satisfiesUnsafe(boolean reverse, byte[] row, int offset, int length, + byte[] fuzzyKeyBytes, byte[] fuzzyKeyMeta) { if (row == null) { // do nothing, let scan to proceed return SatisfiesCode.YES; @@ -399,6 +394,7 @@ public class FuzzyRowFilter extends FilterBase { return SatisfiesCode.YES; } + @VisibleForTesting static SatisfiesCode satisfiesNoUnsafe(boolean reverse, byte[] row, int offset, int length, byte[] fuzzyKeyBytes, byte[] fuzzyKeyMeta) { if (row == null) { 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 c2599796a2..4048bad914 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 @@ -75,93 +75,99 @@ public class TestFuzzyRowFilter { } @Test - public void testSatisfiesForward() { + public void testSatisfiesUnsafeForward() { + if (!FuzzyRowFilter.UNSAFE_UNALIGNED) { + return; + } Assert.assertEquals(FuzzyRowFilter.SatisfiesCode.YES, - FuzzyRowFilter.satisfies(false, - new byte[]{1, (byte) -128, 1, 0, 1}, + FuzzyRowFilter.satisfiesUnsafe(false, + new byte[]{1, (byte) -128, 1, 0, 1}, 0, 5, new byte[]{1, 0, 1}, new byte[]{-1, 0, -1})); Assert.assertEquals(FuzzyRowFilter.SatisfiesCode.NEXT_EXISTS, - FuzzyRowFilter.satisfies(false, - new byte[]{1, (byte) -128, 2, 0, 1}, + FuzzyRowFilter.satisfiesUnsafe(false, + new byte[]{1, (byte) -128, 2, 0, 1}, 0, 5, new byte[]{1, 0, 1}, new byte[]{-1, 0, -1})); - Assert.assertEquals(FuzzyRowFilter.SatisfiesCode.YES, - FuzzyRowFilter.satisfies(false, - new byte[]{1, 2, 1, 3, 3}, + FuzzyRowFilter.satisfiesUnsafe(false, + new byte[]{1, 2, 1, 3, 3}, 0, 5, new byte[]{1, 2, 0, 3}, new byte[]{-1, -1, 0, -1})); Assert.assertEquals(FuzzyRowFilter.SatisfiesCode.NEXT_EXISTS, - FuzzyRowFilter.satisfies(false, - new byte[]{1, 1, 1, 3, 0}, // row to check + FuzzyRowFilter.satisfiesUnsafe(false, + new byte[]{1, 1, 1, 3, 0}, 0, 5, // row to check new byte[]{1, 2, 0, 3}, // fuzzy row new byte[]{-1, -1, 0, -1})); // mask Assert.assertEquals(FuzzyRowFilter.SatisfiesCode.NEXT_EXISTS, - FuzzyRowFilter.satisfies(false, - new byte[]{1, 1, 1, 3, 0}, + FuzzyRowFilter.satisfiesUnsafe(false, + new byte[]{1, 1, 1, 3, 0}, 0, 5, new byte[]{1, (byte) 245, 0, 3}, new byte[]{-1, -1, 0, -1})); Assert.assertEquals(FuzzyRowFilter.SatisfiesCode.NEXT_EXISTS, - FuzzyRowFilter.satisfies(false, - new byte[]{1, 2, 1, 0, 1}, + FuzzyRowFilter.satisfiesUnsafe(false, + new byte[]{1, 2, 1, 0, 1}, 0, 5, new byte[]{0, 1, 2}, new byte[]{0, -1, -1})); } @Test - public void testSatisfiesReverse() { + public void testSatisfiesUnsafeReverse() { + if (!FuzzyRowFilter.UNSAFE_UNALIGNED) { + return; + } + Assert.assertEquals(FuzzyRowFilter.SatisfiesCode.YES, - FuzzyRowFilter.satisfies(true, - new byte[]{1, (byte) -128, 1, 0, 1}, + FuzzyRowFilter.satisfiesUnsafe(true, + new byte[]{1, (byte) -128, 1, 0, 1}, 0, 5, new byte[]{1, 0, 1}, new byte[]{-1, 0, -1})); Assert.assertEquals(FuzzyRowFilter.SatisfiesCode.NEXT_EXISTS, - FuzzyRowFilter.satisfies(true, - new byte[]{1, (byte) -128, 2, 0, 1}, + FuzzyRowFilter.satisfiesUnsafe(true, + new byte[]{1, (byte) -128, 2, 0, 1}, 0, 5, new byte[]{1, 0, 1}, new byte[]{-1, 0, -1})); Assert.assertEquals(FuzzyRowFilter.SatisfiesCode.NEXT_EXISTS, - FuzzyRowFilter.satisfies(true, - new byte[]{2, 3, 1, 1, 1}, + FuzzyRowFilter.satisfiesUnsafe(true, + new byte[]{2, 3, 1, 1, 1}, 0, 5, new byte[]{1, 0, 1}, new byte[]{-1, 0, -1})); Assert.assertEquals(FuzzyRowFilter.SatisfiesCode.YES, - FuzzyRowFilter.satisfies(true, - new byte[]{1, 2, 1, 3, 3}, + FuzzyRowFilter.satisfiesUnsafe(true, + new byte[]{1, 2, 1, 3, 3}, 0, 5, new byte[]{1, 2, 0, 3}, new byte[]{-1, -1, 0, -1})); Assert.assertEquals(FuzzyRowFilter.SatisfiesCode.NEXT_EXISTS, - FuzzyRowFilter.satisfies(true, - new byte[]{1, (byte) 245, 1, 3, 0}, + FuzzyRowFilter.satisfiesUnsafe(true, + new byte[]{1, (byte) 245, 1, 3, 0}, 0, 5, new byte[]{1, 1, 0, 3}, new byte[]{-1, -1, 0, -1})); Assert.assertEquals(FuzzyRowFilter.SatisfiesCode.NEXT_EXISTS, - FuzzyRowFilter.satisfies(true, - new byte[]{1, 3, 1, 3, 0}, + FuzzyRowFilter.satisfiesUnsafe(true, + new byte[]{1, 3, 1, 3, 0}, 0, 5, new byte[]{1, 2, 0, 3}, new byte[]{-1, -1, 0, -1})); Assert.assertEquals(FuzzyRowFilter.SatisfiesCode.NEXT_EXISTS, - FuzzyRowFilter.satisfies(true, - new byte[]{2, 1, 1, 1, 0}, + FuzzyRowFilter.satisfiesUnsafe(true, + new byte[]{2, 1, 1, 1, 0}, 0, 5, new byte[]{1, 2, 0, 3}, new byte[]{-1, -1, 0, -1})); Assert.assertEquals(FuzzyRowFilter.SatisfiesCode.NEXT_EXISTS, - FuzzyRowFilter.satisfies(true, - new byte[]{1, 2, 1, 0, 1}, + FuzzyRowFilter.satisfiesUnsafe(true, + new byte[]{1, 2, 1, 0, 1}, 0, 5, new byte[]{0, 1, 2}, new byte[]{0, -1, -1})); } -- 2.11.0 (Apple Git-81)