@@ -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