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 .load .loadv2 .IngestionLoadJob ;
3839import org .apache .doris .system .Backend ;
@@ -342,18 +343,31 @@ private void finishRealtimePush(AgentTask task, TFinishTaskRequest request) thro
342343 long backendId = pushTask .getBackendId ();
343344 long signature = task .getSignature ();
344345 long transactionId = ((PushTask ) task ).getTransactionId ();
346+ long tableId = pushTask .getTableId ();
347+ long partitionId = pushTask .getPartitionId ();
348+ long pushIndexId = pushTask .getIndexId ();
349+ long pushTabletId = pushTask .getTabletId ();
345350
346351 if (request .getTaskStatus ().getStatusCode () != TStatusCode .OK ) {
347352 if (pushTask .getPushType () == TPushType .DELETE ) {
348353 // we don't need to retry if the returned status code is DELETE_INVALID_CONDITION
349354 // or DELETE_INVALID_PARAMETERS
350355 // note that they will be converted to TStatusCode.INVALID_ARGUMENT when being sent from be to fe
351- if (request .getTaskStatus ().getStatusCode () == TStatusCode .INVALID_ARGUMENT ) {
352- pushTask .countDownToZero (request .getTaskStatus ().getStatusCode (),
353- task .getBackendId () + ": " + request .getTaskStatus ().getErrorMsgs ().toString ());
354- AgentTaskQueue .removeTask (backendId , TTaskType .REALTIME_PUSH , signature );
355- LOG .warn ("finish push replica error: {}" , request .getTaskStatus ().getErrorMsgs ().toString ());
356+ TStatus taskStatus = request .getTaskStatus ();
357+ String msg = task .getBackendId () + ": " + taskStatus .getErrorMsgs ().toString ();
358+ LOG .warn ("finish push replica, signature={}, error: {}" ,
359+ signature , taskStatus .getErrorMsgs ().toString ());
360+ if (taskStatus .getStatusCode () == TStatusCode .OBTAIN_LOCK_FAILED ) {
361+ // retry if obtain lock failed
362+ return ;
363+ }
364+ if (taskStatus .getStatusCode () == TStatusCode .INVALID_ARGUMENT ) {
365+ pushTask .countDownToZero (taskStatus .getStatusCode (), msg );
366+ } else {
367+ pushTask .countDownLatchWithStatus (backendId , pushTabletId ,
368+ new Status (taskStatus .getStatusCode (), msg ));
356369 }
370+ AgentTaskQueue .removeTask (backendId , TTaskType .REALTIME_PUSH , signature );
357371 }
358372 return ;
359373 }
@@ -367,10 +381,6 @@ private void finishRealtimePush(AgentTask task, TFinishTaskRequest request) thro
367381 return ;
368382 }
369383
370- long tableId = pushTask .getTableId ();
371- long partitionId = pushTask .getPartitionId ();
372- long pushIndexId = pushTask .getIndexId ();
373- long pushTabletId = pushTask .getTabletId ();
374384 // push finish type:
375385 // numOfFinishTabletInfos tabletId schemaHash
376386 // Normal: 1 / /
@@ -468,7 +478,7 @@ private void finishRealtimePush(AgentTask task, TFinishTaskRequest request) thro
468478 AgentTaskQueue .removeTask (backendId , TTaskType .REALTIME_PUSH , signature );
469479 LOG .warn ("finish push replica error" , e );
470480 if (pushTask .getPushType () == TPushType .DELETE ) {
471- pushTask .countDownLatch (backendId , pushTabletId );
481+ pushTask .countDownLatchWithStatus (backendId , pushTabletId , Status . CANCELLED );
472482 }
473483 } finally {
474484 olapTable .writeUnlock ();
0 commit comments