diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/CellComparator.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/CellComparator.java index 2c1cc090a927..5f8785850b63 100644 --- a/hbase-common/src/main/java/org/apache/hadoop/hbase/CellComparator.java +++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/CellComparator.java @@ -472,7 +472,7 @@ public static Cell getMidpoint(final KeyValue.KVComparator comparator, final Cel final byte [] rightArray, final int rightOffset, final int rightLength) { // rows are different int minLength = leftLength < rightLength ? leftLength : rightLength; - short diffIdx = 0; + int diffIdx = 0; while (diffIdx < minLength && leftArray[leftOffset + diffIdx] == rightArray[rightOffset + diffIdx]) { diffIdx++; diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegion.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegion.java index 7bf6802d73ae..a20c271fe0ef 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegion.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegion.java @@ -3306,6 +3306,30 @@ public boolean isFamilyEssential(byte[] name) { } } + /** + * Write an HFile block full with Cells whose qualifier that are identical between + * 0 and Short.MAX_VALUE. See HBASE-13329. + * @throws Exception + */ + @Test + public void testLongQualifier() throws Exception { + String method = name.getMethodName(); + TableName tableName = TableName.valueOf(method); + byte[] family = Bytes.toBytes("family"); + this.region = initHRegion(tableName, method, CONF, family); + byte[] q = new byte[Short.MAX_VALUE+2]; + Arrays.fill(q, 0, q.length-1, (byte)42); + for (byte i=0; i<10; i++) { + Put p = new Put(Bytes.toBytes("row")); + // qualifiers that differ past Short.MAX_VALUE + q[q.length-1]=i; + p.addColumn(family, q, q); + region.put(p); + } + region.flushcache(); + HRegion.closeHRegion(this.region); + this.region = null; + } // //////////////////////////////////////////////////////////////////////////// // Split test // ////////////////////////////////////////////////////////////////////////////