Skip to content

Commit bdadccb

Browse files
committed
fix old batch NullPointer after refreshing tableEntry meta information in retry
1 parent 1cb9927 commit bdadccb

File tree

1 file changed

+14
-19
lines changed

1 file changed

+14
-19
lines changed

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

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,8 @@ private void addObTableClientOperation(ObTableOperationType type, Object[] rowke
165165
public List<Object> execute() throws Exception {
166166
// consistent can not be sure
167167
List<Object> results = new ArrayList<Object>(batchOperation.getTableOperations().size());
168-
for (ObTableOperationResult result : executeInternal().getResults()) {
168+
List<ObTableOperationResult> batchResults = executeInternal().getResults();
169+
for (ObTableOperationResult result : batchResults) {
169170
int errCode = result.getHeader().getErrno();
170171
if (errCode == ResultCodes.OB_SUCCESS.errorCode) {
171172
switch (result.getOperationType()) {
@@ -192,7 +193,8 @@ public List<Object> execute() throws Exception {
192193
public List<Object> executeWithResult() throws Exception {
193194
// consistent can not be sure
194195
List<Object> results = new ArrayList<Object>(batchOperation.getTableOperations().size());
195-
for (ObTableOperationResult result : executeInternal().getResults()) {
196+
List<ObTableOperationResult> batchResults = executeInternal().getResults();
197+
for (ObTableOperationResult result : batchResults) {
196198
int errCode = result.getHeader().getErrno();
197199
if (errCode == ResultCodes.OB_SUCCESS.errorCode) {
198200
switch (result.getOperationType()) {
@@ -231,32 +233,22 @@ private Object[] calculateRowKey(ObTableOperation operation) {
231233
return rowKey;
232234
}
233235

234-
public List<ObTableOperation> extractOperations(List<ObPair<Integer, ObTableOperation>> operationsPairs) {
235-
List<ObTableOperation> operations = new ArrayList<>(operationsPairs.size());
236-
for (ObPair<Integer, ObTableOperation> pair : operationsPairs) {
237-
operations.add(pair.getRight());
238-
}
239-
return operations;
240-
}
241-
242-
public Map<Long, ObPair<ObTableParam, List<ObPair<Integer, ObTableOperation>>>> prepareOperations(List<ObTableOperation> operations) throws Exception {
236+
public Map<Long, ObPair<ObTableParam, List<ObPair<Integer, ObTableOperation>>>> prepareOperations(List<ObPair<Integer, ObTableOperation>> operations) throws Exception {
243237
Map<Long, ObPair<ObTableParam, List<ObPair<Integer, ObTableOperation>>>> partitionOperationsMap = new HashMap<>();
244238

245239
if (obTableClient.isOdpMode()) {
246240
ObPair<ObTableParam, List<ObPair<Integer, ObTableOperation>>> obTableOperations = new ObPair<>(
247241
new ObTableParam(obTableClient.getOdpTable()),
248242
new ArrayList<>());
249243
for (int i = 0; i < operations.size(); i++) {
250-
ObTableOperation operation = operations.get(i);
251-
obTableOperations.getRight().add(
252-
new ObPair<>(i, operation));
244+
obTableOperations.getRight().add(operations.get(i));
253245
}
254246
partitionOperationsMap.put(0L, obTableOperations);
255247
return partitionOperationsMap;
256248
}
257249

258250
for (int i = 0; i < operations.size(); i++) {
259-
ObTableOperation operation = operations.get(i);
251+
ObTableOperation operation = operations.get(i).getRight();
260252
ObRowKey rowKeyObject = operation.getEntity().getRowKey();
261253
int rowKeySize = rowKeyObject.getObjs().size();
262254
Object[] rowKey = new Object[rowKeySize];
@@ -269,7 +261,7 @@ public Map<Long, ObPair<ObTableParam, List<ObPair<Integer, ObTableOperation>>>>
269261
ObPair<ObTableParam, List<ObPair<Integer, ObTableOperation>>> obTableOperations = partitionOperationsMap
270262
.computeIfAbsent(tableParam.getPartId(), k -> new ObPair<>(
271263
tableParam, new ArrayList<>()));
272-
obTableOperations.getRight().add(new ObPair<>(i, operation));
264+
obTableOperations.getRight().add(operations.get(i));
273265
}
274266
return partitionOperationsMap;
275267
}
@@ -278,7 +270,11 @@ public Map<Long, ObPair<ObTableParam, List<ObPair<Integer, ObTableOperation>>>>
278270
throws Exception {
279271
// consistent can not be sure
280272
List<ObTableOperation> operations = batchOperation.getTableOperations();
281-
return prepareOperations(operations);
273+
List<ObPair<Integer, ObTableOperation>> operationIdx = new ArrayList<>();
274+
for (int i = 0; i < operations.size(); ++i) {
275+
operationIdx.add(new ObPair<>(i, operations.get(i)));
276+
}
277+
return prepareOperations(operationIdx);
282278
}
283279

284280
/*
@@ -574,8 +570,7 @@ private void executeWithRetries(ObTableOperationResult[] results, Map.Entry<Long
574570
retryCount++;
575571
errCode = ((ObTableNeedFetchMetaException)e).getErrorCode();
576572
errMsg = e.getMessage();
577-
List<ObTableOperation> failedOperations = extractOperations(currentEntry.getValue().getRight());
578-
currentPartitions = prepareOperations(failedOperations);
573+
currentPartitions = prepareOperations(currentEntry.getValue().getRight());
579574
allPartitionsSuccess = false;
580575
break;
581576
} else {

0 commit comments

Comments
 (0)