diff --git a/hbase-client/src/test/java/org/apache/hadoop/hbase/filter/TestComparators.java b/hbase-client/src/test/java/org/apache/hadoop/hbase/filter/TestComparators.java index 7a4f97029ef..3835948b930 100644 --- a/hbase-client/src/test/java/org/apache/hadoop/hbase/filter/TestComparators.java +++ b/hbase-client/src/test/java/org/apache/hadoop/hbase/filter/TestComparators.java @@ -18,6 +18,7 @@ package org.apache.hadoop.hbase.filter; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.nio.ByteBuffer; @@ -97,5 +98,12 @@ public class TestComparators { comparable = new SubstringComparator("cf"); assertEquals(0, PrivateCellUtil.compareFamily(bbCell, comparable)); assertEquals(0, PrivateCellUtil.compareFamily(kv, comparable)); + // Qualifier starts with + kv = new KeyValue(r1, f, q1, v2); + assertTrue(PrivateCellUtil.qualifierStartsWith(kv, Bytes.toBytes("q"))); + assertTrue(PrivateCellUtil.qualifierStartsWith(kv, q1)); + assertFalse(PrivateCellUtil.qualifierStartsWith(kv, q2)); + assertFalse(PrivateCellUtil.qualifierStartsWith(kv, Bytes.toBytes("longerthanthequalifier"))); } + } diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/PrivateCellUtil.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/PrivateCellUtil.java index 768ab006c1f..c26841dad1a 100644 --- a/hbase-common/src/main/java/org/apache/hadoop/hbase/PrivateCellUtil.java +++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/PrivateCellUtil.java @@ -767,6 +767,9 @@ public final class PrivateCellUtil { if (startsWith == null || startsWith.length == 0) { throw new IllegalArgumentException("Cannot pass an empty startsWith"); } + if (left.getQualifierLength() < startsWith.length) { + return false; + } if (left instanceof ByteBufferExtendedCell) { return ByteBufferUtils.equals(((ByteBufferExtendedCell) left).getQualifierByteBuffer(), ((ByteBufferExtendedCell) left).getQualifierPosition(), startsWith.length,