@@ -87,21 +87,100 @@ public ByteBuffer decodeKeyValues(DataInputStream source,
8787 // Having this as static is fine but if META is having DBE then we should
8888 // change this.
8989 public static int compareCommonRowPrefix (Cell left , Cell right , int rowCommonPrefix ) {
90- return Bytes .compareTo (left .getRowArray (), left .getRowOffset () + rowCommonPrefix ,
91- left .getRowLength () - rowCommonPrefix , right .getRowArray (),
92- right .getRowOffset () + rowCommonPrefix , right .getRowLength () - rowCommonPrefix );
90+ if (left instanceof ByteBufferExtendedCell ) {
91+ ByteBufferExtendedCell bbLeft = (ByteBufferExtendedCell ) left ;
92+ if (right instanceof ByteBufferExtendedCell ) {
93+ ByteBufferExtendedCell bbRight = (ByteBufferExtendedCell ) right ;
94+ return ByteBufferUtils .compareTo (bbLeft .getRowByteBuffer (),
95+ bbLeft .getRowPosition () + rowCommonPrefix , left .getRowLength () - rowCommonPrefix ,
96+ bbRight .getRowByteBuffer (), bbRight .getRowPosition () + rowCommonPrefix ,
97+ right .getRowLength () - rowCommonPrefix );
98+ } else {
99+ return ByteBufferUtils .compareTo (bbLeft .getRowByteBuffer (),
100+ bbLeft .getRowPosition () + rowCommonPrefix , left .getRowLength () - rowCommonPrefix ,
101+ right .getRowArray (), right .getRowOffset () + rowCommonPrefix ,
102+ right .getRowLength () - rowCommonPrefix );
103+ }
104+ } else {
105+ if (right instanceof ByteBufferExtendedCell ) {
106+ ByteBufferExtendedCell bbRight = (ByteBufferExtendedCell ) right ;
107+ return ByteBufferUtils .compareTo (left .getRowArray (), left .getRowOffset () + rowCommonPrefix ,
108+ left .getRowLength () - rowCommonPrefix , bbRight .getRowByteBuffer (),
109+ bbRight .getRowPosition () + rowCommonPrefix , right .getRowLength () - rowCommonPrefix );
110+ } else {
111+ return Bytes .compareTo (left .getRowArray (), left .getRowOffset () + rowCommonPrefix ,
112+ left .getRowLength () - rowCommonPrefix , right .getRowArray (),
113+ right .getRowOffset () + rowCommonPrefix , right .getRowLength () - rowCommonPrefix );
114+ }
115+ }
93116 }
94117
95118 public static int compareCommonFamilyPrefix (Cell left , Cell right , int familyCommonPrefix ) {
96- return Bytes .compareTo (left .getFamilyArray (), left .getFamilyOffset () + familyCommonPrefix ,
97- left .getFamilyLength () - familyCommonPrefix , right .getFamilyArray (),
98- right .getFamilyOffset () + familyCommonPrefix , right .getFamilyLength () - familyCommonPrefix );
119+ if (left instanceof ByteBufferExtendedCell ) {
120+ ByteBufferExtendedCell bbLeft = (ByteBufferExtendedCell ) left ;
121+ if (right instanceof ByteBufferExtendedCell ) {
122+ ByteBufferExtendedCell bbRight = (ByteBufferExtendedCell ) right ;
123+ return ByteBufferUtils .compareTo (bbLeft .getFamilyByteBuffer (),
124+ bbLeft .getFamilyPosition () + familyCommonPrefix ,
125+ left .getFamilyLength () - familyCommonPrefix , bbRight .getFamilyByteBuffer (),
126+ bbRight .getFamilyPosition () + familyCommonPrefix ,
127+ right .getFamilyLength () - familyCommonPrefix );
128+ } else {
129+ return ByteBufferUtils .compareTo (bbLeft .getFamilyByteBuffer (),
130+ bbLeft .getFamilyPosition () + familyCommonPrefix ,
131+ left .getFamilyLength () - familyCommonPrefix , right .getFamilyArray (),
132+ right .getFamilyOffset () + familyCommonPrefix ,
133+ right .getFamilyLength () - familyCommonPrefix );
134+ }
135+ } else {
136+ if (right instanceof ByteBufferExtendedCell ) {
137+ ByteBufferExtendedCell bbRight = (ByteBufferExtendedCell ) right ;
138+ return ByteBufferUtils .compareTo (left .getFamilyArray (),
139+ left .getFamilyOffset () + familyCommonPrefix , left .getFamilyLength () - familyCommonPrefix ,
140+ bbRight .getFamilyByteBuffer (), bbRight .getFamilyPosition () + familyCommonPrefix ,
141+ right .getFamilyLength () - familyCommonPrefix );
142+ } else {
143+ return Bytes .compareTo (left .getFamilyArray (), left .getFamilyOffset () + familyCommonPrefix ,
144+ left .getFamilyLength () - familyCommonPrefix , right .getFamilyArray (),
145+ right .getFamilyOffset () + familyCommonPrefix ,
146+ right .getFamilyLength () - familyCommonPrefix );
147+ }
148+ }
99149 }
100150
101151 public static int compareCommonQualifierPrefix (Cell left , Cell right , int qualCommonPrefix ) {
102- return Bytes .compareTo (left .getQualifierArray (), left .getQualifierOffset () + qualCommonPrefix ,
103- left .getQualifierLength () - qualCommonPrefix , right .getQualifierArray (),
104- right .getQualifierOffset () + qualCommonPrefix , right .getQualifierLength () - qualCommonPrefix );
152+ if (left instanceof ByteBufferExtendedCell ) {
153+ ByteBufferExtendedCell bbLeft = (ByteBufferExtendedCell ) left ;
154+ if (right instanceof ByteBufferExtendedCell ) {
155+ ByteBufferExtendedCell bbRight = (ByteBufferExtendedCell ) right ;
156+ return ByteBufferUtils .compareTo (bbLeft .getQualifierByteBuffer (),
157+ bbLeft .getQualifierPosition () + qualCommonPrefix ,
158+ left .getQualifierLength () - qualCommonPrefix , bbRight .getQualifierByteBuffer (),
159+ bbRight .getQualifierPosition () + qualCommonPrefix ,
160+ right .getQualifierLength () - qualCommonPrefix );
161+ } else {
162+ return ByteBufferUtils .compareTo (bbLeft .getQualifierByteBuffer (),
163+ bbLeft .getQualifierPosition () + qualCommonPrefix ,
164+ left .getQualifierLength () - qualCommonPrefix , right .getQualifierArray (),
165+ right .getQualifierOffset () + qualCommonPrefix ,
166+ right .getQualifierLength () - qualCommonPrefix );
167+ }
168+ } else {
169+ if (right instanceof ByteBufferExtendedCell ) {
170+ ByteBufferExtendedCell bbRight = (ByteBufferExtendedCell ) right ;
171+ return ByteBufferUtils .compareTo (left .getQualifierArray (),
172+ left .getQualifierOffset () + qualCommonPrefix ,
173+ left .getQualifierLength () - qualCommonPrefix , bbRight .getQualifierByteBuffer (),
174+ bbRight .getQualifierPosition () + qualCommonPrefix ,
175+ right .getQualifierLength () - qualCommonPrefix );
176+ } else {
177+ return Bytes .compareTo (left .getQualifierArray (),
178+ left .getQualifierOffset () + qualCommonPrefix ,
179+ left .getQualifierLength () - qualCommonPrefix , right .getQualifierArray (),
180+ right .getQualifierOffset () + qualCommonPrefix ,
181+ right .getQualifierLength () - qualCommonPrefix );
182+ }
183+ }
105184 }
106185
107186 protected static class SeekerState {
@@ -954,25 +1033,57 @@ private int compareTypeBytes(Cell key, Cell right) {
9541033 return 0 ;
9551034 }
9561035
957- private static int findCommonPrefixInRowPart (Cell left , Cell right , int rowCommonPrefix ) {
958- return Bytes .findCommonPrefix (left .getRowArray (), right .getRowArray (),
959- left .getRowLength () - rowCommonPrefix , right .getRowLength () - rowCommonPrefix ,
960- left .getRowOffset () + rowCommonPrefix , right .getRowOffset () + rowCommonPrefix );
1036+ // These findCommonPrefix* methods rely on the fact that keyOnlyKv is the "right" cell argument
1037+ // and always on-heap
1038+
1039+ private static int findCommonPrefixInRowPart (Cell left , KeyValue .KeyOnlyKeyValue right ,
1040+ int rowCommonPrefix ) {
1041+ if (left instanceof ByteBufferExtendedCell ) {
1042+ ByteBufferExtendedCell bbLeft = (ByteBufferExtendedCell ) left ;
1043+ return ByteBufferUtils .findCommonPrefix (bbLeft .getRowByteBuffer (),
1044+ bbLeft .getRowPosition () + rowCommonPrefix , left .getRowLength () - rowCommonPrefix ,
1045+ right .getRowArray (), right .getRowOffset () + rowCommonPrefix ,
1046+ right .getRowLength () - rowCommonPrefix );
1047+ } else {
1048+ return Bytes .findCommonPrefix (left .getRowArray (), right .getRowArray (),
1049+ left .getRowLength () - rowCommonPrefix , right .getRowLength () - rowCommonPrefix ,
1050+ left .getRowOffset () + rowCommonPrefix , right .getRowOffset () + rowCommonPrefix );
1051+ }
9611052 }
9621053
963- private static int findCommonPrefixInFamilyPart (Cell left , Cell right , int familyCommonPrefix ) {
964- return Bytes .findCommonPrefix (left .getFamilyArray (), right .getFamilyArray (),
965- left .getFamilyLength () - familyCommonPrefix , right .getFamilyLength () - familyCommonPrefix ,
966- left .getFamilyOffset () + familyCommonPrefix , right .getFamilyOffset () + familyCommonPrefix );
1054+ private static int findCommonPrefixInFamilyPart (Cell left , KeyValue .KeyOnlyKeyValue right ,
1055+ int familyCommonPrefix ) {
1056+ if (left instanceof ByteBufferExtendedCell ) {
1057+ ByteBufferExtendedCell bbLeft = (ByteBufferExtendedCell ) left ;
1058+ return ByteBufferUtils .findCommonPrefix (bbLeft .getFamilyByteBuffer (),
1059+ bbLeft .getFamilyPosition () + familyCommonPrefix ,
1060+ left .getFamilyLength () - familyCommonPrefix , right .getFamilyArray (),
1061+ right .getFamilyOffset () + familyCommonPrefix ,
1062+ right .getFamilyLength () - familyCommonPrefix );
1063+ } else {
1064+ return Bytes .findCommonPrefix (left .getFamilyArray (), right .getFamilyArray (),
1065+ left .getFamilyLength () - familyCommonPrefix , right .getFamilyLength () - familyCommonPrefix ,
1066+ left .getFamilyOffset () + familyCommonPrefix ,
1067+ right .getFamilyOffset () + familyCommonPrefix );
1068+ }
9671069 }
9681070
969- private static int findCommonPrefixInQualifierPart (Cell left , Cell right ,
1071+ private static int findCommonPrefixInQualifierPart (Cell left , KeyValue . KeyOnlyKeyValue right ,
9701072 int qualifierCommonPrefix ) {
971- return Bytes .findCommonPrefix (left .getQualifierArray (), right .getQualifierArray (),
972- left .getQualifierLength () - qualifierCommonPrefix ,
973- right .getQualifierLength () - qualifierCommonPrefix ,
974- left .getQualifierOffset () + qualifierCommonPrefix ,
975- right .getQualifierOffset () + qualifierCommonPrefix );
1073+ if (left instanceof ByteBufferExtendedCell ) {
1074+ ByteBufferExtendedCell bbLeft = (ByteBufferExtendedCell ) left ;
1075+ return ByteBufferUtils .findCommonPrefix (bbLeft .getQualifierByteBuffer (),
1076+ bbLeft .getQualifierPosition () + qualifierCommonPrefix ,
1077+ left .getQualifierLength () - qualifierCommonPrefix , right .getQualifierArray (),
1078+ right .getQualifierOffset () + qualifierCommonPrefix ,
1079+ right .getQualifierLength () - qualifierCommonPrefix );
1080+ } else {
1081+ return Bytes .findCommonPrefix (left .getQualifierArray (), right .getQualifierArray (),
1082+ left .getQualifierLength () - qualifierCommonPrefix ,
1083+ right .getQualifierLength () - qualifierCommonPrefix ,
1084+ left .getQualifierOffset () + qualifierCommonPrefix ,
1085+ right .getQualifierOffset () + qualifierCommonPrefix );
1086+ }
9761087 }
9771088
9781089 private void moveToPrevious () {
0 commit comments