Skip to content

Commit 4c2bf71

Browse files
authored
HBASE-22937 The RawBytesComparator in branch-1 have wrong comparison order (#582)
1 parent 157ffae commit 4c2bf71

File tree

2 files changed

+24
-13
lines changed

2 files changed

+24
-13
lines changed

hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValue.java

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2630,9 +2630,8 @@ int compareIgnoringPrefix(int commonPrefix, byte[] left, int loffset, int llengt
26302630
*/
26312631
public static class RawBytesComparator extends KVComparator {
26322632
/**
2633-
* The HFileV2 file format's trailer contains this class name. We reinterpret this and
2634-
* instantiate the appropriate comparator.
2635-
* TODO: With V3 consider removing this.
2633+
* The HFileV2 file format's trailer contains this class name. We reinterpret this and
2634+
* instantiate the appropriate comparator. TODO: With V3 consider removing this.
26362635
* @return legacy class name for FileFileTrailer#comparatorClassName
26372636
*/
26382637
@Override
@@ -2645,9 +2644,9 @@ public String getLegacyKeyComparatorName() {
26452644
*/
26462645
@Override
26472646
@Deprecated
2648-
public int compareFlatKey(byte[] left, int loffset, int llength, byte[] right,
2649-
int roffset, int rlength) {
2650-
return Bytes.BYTES_RAWCOMPARATOR.compare(left, loffset, llength, right, roffset, rlength);
2647+
public int compareFlatKey(byte[] left, int loffset, int llength, byte[] right, int roffset,
2648+
int rlength) {
2649+
return Bytes.BYTES_RAWCOMPARATOR.compare(left, loffset, llength, right, roffset, rlength);
26512650
}
26522651

26532652
@Override
@@ -2659,34 +2658,33 @@ public int compare(Cell left, Cell right) {
26592658
@VisibleForTesting
26602659
public int compareOnlyKeyPortion(Cell left, Cell right) {
26612660
int c = Bytes.BYTES_RAWCOMPARATOR.compare(left.getRowArray(), left.getRowOffset(),
2662-
left.getRowLength(), right.getRowArray(), right.getRowOffset(), right.getRowLength());
2661+
left.getRowLength(), right.getRowArray(), right.getRowOffset(), right.getRowLength());
26632662
if (c != 0) {
26642663
return c;
26652664
}
26662665
c = Bytes.BYTES_RAWCOMPARATOR.compare(left.getFamilyArray(), left.getFamilyOffset(),
2667-
left.getFamilyLength(), right.getFamilyArray(), right.getFamilyOffset(),
2668-
right.getFamilyLength());
2666+
left.getFamilyLength(), right.getFamilyArray(), right.getFamilyOffset(),
2667+
right.getFamilyLength());
26692668
if (c != 0) {
26702669
return c;
26712670
}
26722671
c = Bytes.BYTES_RAWCOMPARATOR.compare(left.getQualifierArray(), left.getQualifierOffset(),
2673-
left.getQualifierLength(), right.getQualifierArray(), right.getQualifierOffset(),
2674-
right.getQualifierLength());
2672+
left.getQualifierLength(), right.getQualifierArray(), right.getQualifierOffset(),
2673+
right.getQualifierLength());
26752674
if (c != 0) {
26762675
return c;
26772676
}
26782677
c = compareTimestamps(left.getTimestamp(), right.getTimestamp());
26792678
if (c != 0) {
26802679
return c;
26812680
}
2682-
return (0xff & left.getTypeByte()) - (0xff & right.getTypeByte());
2681+
return (0xff & right.getTypeByte()) - (0xff & left.getTypeByte());
26832682
}
26842683

26852684
@Override
26862685
public byte[] calcIndexKey(byte[] lastKeyOfPreviousBlock, byte[] firstKeyInBlock) {
26872686
return firstKeyInBlock;
26882687
}
2689-
26902688
}
26912689

26922690
/**

hbase-common/src/test/java/org/apache/hadoop/hbase/TestKeyValue.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import org.apache.commons.logging.LogFactory;
3939
import org.apache.hadoop.hbase.KeyValue.KVComparator;
4040
import org.apache.hadoop.hbase.KeyValue.MetaComparator;
41+
import org.apache.hadoop.hbase.KeyValue.Type;
4142
import org.apache.hadoop.hbase.testclassification.SmallTests;
4243
import org.apache.hadoop.hbase.util.ByteBufferUtils;
4344
import org.apache.hadoop.hbase.util.Bytes;
@@ -722,4 +723,16 @@ public void testCheckKeyValueBytesFailureCase() throws Exception {
722723
}
723724
}
724725
}
726+
727+
@Test
728+
public void testRawBytesComparator() {
729+
long ts = System.currentTimeMillis();
730+
byte[] key = Bytes.toBytes("key");
731+
byte[] cf = Bytes.toBytes("cf");
732+
byte[] qualifier = Bytes.toBytes("qualifier");
733+
byte[] value = Bytes.toBytes("value");
734+
KeyValue kvA1 = new KeyValue(key, cf, qualifier, ts, Type.Put, value);
735+
KeyValue kvA2 = new KeyValue(key, cf, qualifier, ts, Type.DeleteFamily, value);
736+
assertTrue(KeyValue.RAW_COMPARATOR.compare(kvA1, kvA2) > 0);
737+
}
725738
}

0 commit comments

Comments
 (0)