From 5cff0f47883b8d923c84dfa1258da0299307e35a Mon Sep 17 00:00:00 2001 From: CHIA-PING TSAI Date: Thu, 13 Apr 2017 13:57:19 +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 895ffc8c99..740ba2ef7a 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 @@ -59,7 +59,8 @@ import com.google.common.annotations.VisibleForTesting; */ @InterfaceAudience.Public 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; @@ -309,24 +310,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; @@ -384,6 +379,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 0d480885e3..ba606152f0 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 @@ -76,93 +76,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)