Skip to content

Commit 8365ecd

Browse files
committed
revert ls batch, do not fetch odp partition meta in ls batch
1 parent 678a618 commit 8365ecd

File tree

1 file changed

+25
-36
lines changed

1 file changed

+25
-36
lines changed

src/main/java/com/alipay/oceanbase/rpc/table/ObTableClientLSBatchOpsImpl.java

Lines changed: 25 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -336,33 +336,38 @@ private List<ObTableSingleOp> extractOperations(Map<Long, ObPair<ObTableParam, L
336336
public Map<Long, Map<Long, ObPair<ObTableParam, List<ObPair<Integer, ObTableSingleOp>>>>> prepareOperations(List<ObTableSingleOp> operations) throws Exception {
337337
Map<Long, Map<Long, ObPair<ObTableParam, List<ObPair<Integer, ObTableSingleOp>>>>> lsOperationsMap = new HashMap<>();
338338

339+
if (obTableClient.isOdpMode()) {
340+
Map<Long, ObPair<ObTableParam, List<ObPair<Integer, ObTableSingleOp>>>> tabletOperationsMap = new HashMap<>();
341+
ObPair<ObTableParam, List<ObPair<Integer, ObTableSingleOp>>> obTableOperations =
342+
new ObPair<>(new ObTableParam(obTableClient.getOdpTable()),
343+
new ArrayList<ObPair<Integer, ObTableSingleOp>>());
344+
for (int i = 0; i < operations.size(); i++) {
345+
ObTableSingleOp operation = operations.get(i);
346+
obTableOperations.getRight().add(new ObPair<Integer, ObTableSingleOp>(i, operation));
347+
}
348+
tabletOperationsMap.put(INVALID_TABLET_ID, obTableOperations);
349+
lsOperationsMap.put(INVALID_LS_ID, tabletOperationsMap);
350+
return lsOperationsMap;
351+
}
352+
339353
for (int i = 0; i < operations.size(); i++) {
340354
ObTableSingleOp operation = operations.get(i);
341355
Object[] rowKey = calculateRowKey(operation);
342356

343-
ObPair<Long, ObTableParam> tableObPair = null;
344-
if (!obTableClient.isOdpMode()) {
345-
String real_tableName = tableName;
346-
if (this.entityType == ObTableEntityType.HKV && obTableClient.isTableGroupName(tableName)) {
347-
real_tableName = obTableClient.tryGetTableNameFromTableGroupCache(tableName, false);
348-
}
349-
tableObPair= obTableClient.getTable(real_tableName, rowKey,
350-
false, false, obTableClient.getRoute(false));
351-
} else {
352-
tableObPair = obTableClient.getODPTableWithRowKeyValue(tableName, rowKey, false);
353-
}
354-
if (tableObPair == null) {
355-
throw new ObTableUnexpectedException("fail to get table pair in batch");
357+
String real_tableName = tableName;
358+
if (this.entityType == ObTableEntityType.HKV && obTableClient.isTableGroupName(tableName)) {
359+
real_tableName = obTableClient.tryGetTableNameFromTableGroupCache(tableName, false);
356360
}
361+
ObPair<Long, ObTableParam> tableObPair= obTableClient.getTable(real_tableName, rowKey,
362+
false, false, obTableClient.getRoute(false));
357363
long lsId = tableObPair.getRight().getLsId();
358364

359365
Map<Long, ObPair<ObTableParam, List<ObPair<Integer, ObTableSingleOp>>>> tabletOperations
360-
= lsOperationsMap.computeIfAbsent(lsId, k -> new HashMap<>());
366+
= lsOperationsMap.computeIfAbsent(lsId, k -> new HashMap<>());
361367
// if ls id not exists
362368

363-
final ObPair<Long, ObTableParam> tmpTableObPair = tableObPair;
364369
ObPair<ObTableParam, List<ObPair<Integer, ObTableSingleOp>>> singleOperations =
365-
tabletOperations.computeIfAbsent(tmpTableObPair.getLeft(), k -> new ObPair<>(tmpTableObPair.getRight(), new ArrayList<>()));
370+
tabletOperations.computeIfAbsent(tableObPair.getLeft(), k -> new ObPair<>(tableObPair.getRight(), new ArrayList<>()));
366371
// if tablet id not exists
367372
singleOperations.getRight().add(new ObPair<>(i, operation));
368373
}
@@ -439,7 +444,6 @@ public void partitionExecute(ObTableSingleOpResult[] results,
439444

440445
ObTableLSOpResult subLSOpResult;
441446
boolean needRefreshTableEntry = false;
442-
boolean odpNeedRenew = false;
443447
int tryTimes = 0;
444448
long startExecute = System.currentTimeMillis();
445449
Set<String> failedServerList = null;
@@ -462,12 +466,7 @@ public void partitionExecute(ObTableSingleOpResult[] results,
462466
tryTimes++;
463467
try {
464468
if (obTableClient.isOdpMode()) {
465-
if (tryTimes > 1) {
466-
ObTableParam param = obTableClient.getODPTableWithPartId(tableName, originPartId, odpNeedRenew).getRight();
467-
subObTable = param.getObTable();
468-
tableLsOpRequest.getLSOperation().setLsId(param.getLsId());
469-
tableLsOpRequest.setTableId(param.getTableId());
470-
}
469+
subObTable = obTableClient.getOdpTable();
471470
} else {
472471
if (tryTimes > 1) {
473472
if (route == null) {
@@ -505,19 +504,9 @@ public void partitionExecute(ObTableSingleOpResult[] results,
505504
break;
506505
} catch (Exception ex) {
507506
if (obTableClient.isOdpMode()) {
508-
if ((tryTimes - 1) < obTableClient.getRuntimeRetryTimes()) {
509-
logger.warn("meet exception when execute ls batch in odp mode." +
510-
"tablename: {}, errMsg: {}", tableName, ex.getMessage());
511-
if (ex instanceof ObTablePartitionChangeException &&
512-
((ObTablePartitionChangeException) ex).getErrorCode() == ResultCodes.OB_ERR_KV_ROUTE_ENTRY_EXPIRE.errorCode) {
513-
odpNeedRenew = true;
514-
}
515-
else {
516-
throw ex;
517-
}
518-
} else {
519-
throw ex;
520-
}
507+
logger.warn("meet exception when execute ls batch in odp mode." +
508+
"tablename: {}, errMsg: {}", tableName, ex.getMessage());
509+
throw ex;
521510
} else if (ex instanceof ObTableReplicaNotReadableException) {
522511
if ((tryTimes - 1) < obTableClient.getRuntimeRetryTimes()) {
523512
logger.warn("tablename:{} ls id:{} retry when replica not readable: {}",

0 commit comments

Comments
 (0)