3333import org .apache .doris .cloud .master .CloudReportHandler ;
3434import org .apache .doris .common .Config ;
3535import org .apache .doris .common .MetaNotFoundException ;
36+ import org .apache .doris .common .Status ;
3637import org .apache .doris .load .DeleteJob ;
3738import org .apache .doris .system .Backend ;
3839import org .apache .doris .task .AgentTask ;
@@ -341,18 +342,31 @@ private void finishRealtimePush(AgentTask task, TFinishTaskRequest request) thro
341342 long backendId = pushTask .getBackendId ();
342343 long signature = task .getSignature ();
343344 long transactionId = ((PushTask ) task ).getTransactionId ();
345+ long tableId = pushTask .getTableId ();
346+ long partitionId = pushTask .getPartitionId ();
347+ long pushIndexId = pushTask .getIndexId ();
348+ long pushTabletId = pushTask .getTabletId ();
344349
345350 if (request .getTaskStatus ().getStatusCode () != TStatusCode .OK ) {
346351 if (pushTask .getPushType () == TPushType .DELETE ) {
347352 // we don't need to retry if the returned status code is DELETE_INVALID_CONDITION
348353 // or DELETE_INVALID_PARAMETERS
349354 // note that they will be converted to TStatusCode.INVALID_ARGUMENT when being sent from be to fe
350- if (request .getTaskStatus ().getStatusCode () == TStatusCode .INVALID_ARGUMENT ) {
351- pushTask .countDownToZero (request .getTaskStatus ().getStatusCode (),
352- task .getBackendId () + ": " + request .getTaskStatus ().getErrorMsgs ().toString ());
353- AgentTaskQueue .removeTask (backendId , TTaskType .REALTIME_PUSH , signature );
354- LOG .warn ("finish push replica error: {}" , request .getTaskStatus ().getErrorMsgs ().toString ());
355+ TStatus taskStatus = request .getTaskStatus ();
356+ String msg = task .getBackendId () + ": " + taskStatus .getErrorMsgs ().toString ();
357+ LOG .warn ("finish push replica, signature={}, error: {}" ,
358+ signature , taskStatus .getErrorMsgs ().toString ());
359+ if (taskStatus .getStatusCode () == TStatusCode .OBTAIN_LOCK_FAILED ) {
360+ // retry if obtain lock failed
361+ return ;
362+ }
363+ if (taskStatus .getStatusCode () == TStatusCode .INVALID_ARGUMENT ) {
364+ pushTask .countDownToZero (taskStatus .getStatusCode (), msg );
365+ } else {
366+ pushTask .countDownLatchWithStatus (backendId , pushTabletId ,
367+ new Status (taskStatus .getStatusCode (), msg ));
355368 }
369+ AgentTaskQueue .removeTask (backendId , TTaskType .REALTIME_PUSH , signature );
356370 }
357371 return ;
358372 }
@@ -366,10 +380,6 @@ private void finishRealtimePush(AgentTask task, TFinishTaskRequest request) thro
366380 return ;
367381 }
368382
369- long tableId = pushTask .getTableId ();
370- long partitionId = pushTask .getPartitionId ();
371- long pushIndexId = pushTask .getIndexId ();
372- long pushTabletId = pushTask .getTabletId ();
373383 // push finish type:
374384 // numOfFinishTabletInfos tabletId schemaHash
375385 // Normal: 1 / /
@@ -458,7 +468,7 @@ private void finishRealtimePush(AgentTask task, TFinishTaskRequest request) thro
458468 AgentTaskQueue .removeTask (backendId , TTaskType .REALTIME_PUSH , signature );
459469 LOG .warn ("finish push replica error" , e );
460470 if (pushTask .getPushType () == TPushType .DELETE ) {
461- pushTask .countDownLatch (backendId , pushTabletId );
471+ pushTask .countDownLatchWithStatus (backendId , pushTabletId , Status . CANCELLED );
462472 }
463473 } finally {
464474 olapTable .writeUnlock ();
0 commit comments