Skip to content

Commit 4f42647

Browse files
Zhou-jwshenyunlong
authored andcommitted
fix [multi cf] get/put/delete random binary column, qualifier unexpectedly expands its original size && rename variables
1 parent 0876dbd commit 4f42647

File tree

1 file changed

+21
-7
lines changed

1 file changed

+21
-7
lines changed

src/main/java/com/alipay/oceanbase/hbase/OHTable.java

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -908,15 +908,20 @@ private String getTargetTableName(String tableNameString) {
908908
private void processColumnFilters(NavigableSet<byte[]> columnFilters,
909909
Map<byte[], NavigableSet<byte[]>> familyMap) {
910910
for (Map.Entry<byte[], NavigableSet<byte[]>> entry : familyMap.entrySet()) {
911+
byte[] family = entry.getKey();
911912
if (entry.getValue() != null) {
912913
for (byte[] columnName : entry.getValue()) {
913-
String columnNameStr = Bytes.toString(columnName);
914-
columnNameStr = Bytes.toString(entry.getKey()) + "." + columnNameStr;
915-
columnFilters.add(columnNameStr.getBytes());
914+
byte[] newQualifier = new byte[family.length + 1/* length of "." */ + columnName.length];
915+
System.arraycopy(family, 0, newQualifier, 0, family.length);
916+
newQualifier[family.length] = 0x2E; // 0x2E in utf-8 is "."
917+
System.arraycopy(columnName, 0, newQualifier, family.length + 1, columnName.length);
918+
columnFilters.add(newQualifier);
916919
}
917920
} else {
918-
String columnNameStr = Bytes.toString(entry.getKey()) + ".";
919-
columnFilters.add(columnNameStr.getBytes());
921+
byte[] newQualifier = new byte[family.length + 1/* length of "."*/];
922+
System.arraycopy(family, 0, newQualifier, 0, family.length);
923+
newQualifier[family.length] = 0x2E; // 0x2E in utf-8 is "."
924+
columnFilters.add(newQualifier);
920925
}
921926
}
922927
}
@@ -1874,7 +1879,7 @@ private ObHTableFilter buildObHTableFilter(byte[] filterString, TimeRange timeRa
18741879
if (columnQualifier == null) {
18751880
obHTableFilter.addSelectColumnQualifier(new byte[0]);
18761881
} else {
1877-
obHTableFilter.addSelectColumnQualifier(columnQualifier);
1882+
obHTableFilter.addSelectColumnQualifier(columnQualifier);
18781883
}
18791884
}
18801885
}
@@ -2012,6 +2017,14 @@ private QueryAndMutate buildDeleteQueryAndMutate(KeyValue kv,
20122017
KeyValue.Type kvType = KeyValue.Type.codeToType(kv.getType().getCode());
20132018
com.alipay.oceanbase.rpc.mutation.Mutation tableMutation = buildMutation(kv, operationType,
20142019
isTableGroup, family, TTL);
2020+
// construct new_kv otherwise filter will fail to match targeted columns
2021+
byte[] oldQualifier = CellUtil.cloneQualifier(kv);
2022+
byte[] newQualifier = new byte[family.length + 1/* length of "." */ + oldQualifier.length];
2023+
System.arraycopy(family, 0, newQualifier, 0, family.length);
2024+
newQualifier[family.length] = 0x2E; // 0x2E in utf-8 is "."
2025+
System.arraycopy(oldQualifier, 0, newQualifier, family.length + 1, oldQualifier.length);
2026+
kv = modifyQualifier(kv, newQualifier);
2027+
20152028
ObNewRange range = new ObNewRange();
20162029
ObTableQuery tableQuery = new ObTableQuery();
20172030
tableQuery.setObKVParams(buildOBKVParams((Scan) null));
@@ -2274,8 +2287,9 @@ private BatchOperation buildBatchOperation(String tableName, List<? extends Row>
22742287
List<Cell> keyValueList = entry.getValue();
22752288
for (Cell kv : keyValueList) {
22762289
singleOpResultNum++;
2290+
22772291
if (disExec) {
2278-
batch.addOperation(buildDeleteQueryAndMutate((KeyValue) kv, DEL, false, family, Long.MAX_VALUE));
2292+
batch.addOperation(buildDeleteQueryAndMutate((KeyValue) kv, DEL, isTableGroup, family, Long.MAX_VALUE));
22792293
} else {
22802294
batch.addOperation(buildMutation(kv, DEL, isTableGroup, family, Long.MAX_VALUE));
22812295
}

0 commit comments

Comments
 (0)