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 ;
@@ -319,18 +320,31 @@ private void finishRealtimePush(AgentTask task, TFinishTaskRequest request) thro
319320 long backendId = pushTask .getBackendId ();
320321 long signature = task .getSignature ();
321322 long transactionId = ((PushTask ) task ).getTransactionId ();
323+ long tableId = pushTask .getTableId ();
324+ long partitionId = pushTask .getPartitionId ();
325+ long pushIndexId = pushTask .getIndexId ();
326+ long pushTabletId = pushTask .getTabletId ();
322327
323328 if (request .getTaskStatus ().getStatusCode () != TStatusCode .OK ) {
324329 if (pushTask .getPushType () == TPushType .DELETE ) {
325330 // we don't need to retry if the returned status code is DELETE_INVALID_CONDITION
326331 // or DELETE_INVALID_PARAMETERS
327332 // note that they will be converted to TStatusCode.INVALID_ARGUMENT when being sent from be to fe
328- if (request .getTaskStatus ().getStatusCode () == TStatusCode .INVALID_ARGUMENT ) {
329- pushTask .countDownToZero (request .getTaskStatus ().getStatusCode (),
330- task .getBackendId () + ": " + request .getTaskStatus ().getErrorMsgs ().toString ());
331- AgentTaskQueue .removeTask (backendId , TTaskType .REALTIME_PUSH , signature );
332- LOG .warn ("finish push replica error: {}" , request .getTaskStatus ().getErrorMsgs ().toString ());
333+ TStatus taskStatus = request .getTaskStatus ();
334+ String msg = task .getBackendId () + ": " + taskStatus .getErrorMsgs ().toString ();
335+ LOG .warn ("finish push replica, signature={}, error: {}" ,
336+ signature , taskStatus .getErrorMsgs ().toString ());
337+ if (taskStatus .getStatusCode () == TStatusCode .OBTAIN_LOCK_FAILED ) {
338+ // retry if obtain lock failed
339+ return ;
340+ }
341+ if (taskStatus .getStatusCode () == TStatusCode .INVALID_ARGUMENT ) {
342+ pushTask .countDownToZero (taskStatus .getStatusCode (), msg );
343+ } else {
344+ pushTask .countDownLatchWithStatus (backendId , pushTabletId ,
345+ new Status (taskStatus .getStatusCode (), msg ));
333346 }
347+ AgentTaskQueue .removeTask (backendId , TTaskType .REALTIME_PUSH , signature );
334348 }
335349 return ;
336350 }
@@ -344,10 +358,6 @@ private void finishRealtimePush(AgentTask task, TFinishTaskRequest request) thro
344358 return ;
345359 }
346360
347- long tableId = pushTask .getTableId ();
348- long partitionId = pushTask .getPartitionId ();
349- long pushIndexId = pushTask .getIndexId ();
350- long pushTabletId = pushTask .getTabletId ();
351361 // push finish type:
352362 // numOfFinishTabletInfos tabletId schemaHash
353363 // Normal: 1 / /
@@ -445,7 +455,7 @@ private void finishRealtimePush(AgentTask task, TFinishTaskRequest request) thro
445455 AgentTaskQueue .removeTask (backendId , TTaskType .REALTIME_PUSH , signature );
446456 LOG .warn ("finish push replica error" , e );
447457 if (pushTask .getPushType () == TPushType .DELETE ) {
448- pushTask .countDownLatch (backendId , pushTabletId );
458+ pushTask .countDownLatchWithStatus (backendId , pushTabletId , Status . CANCELLED );
449459 }
450460 } finally {
451461 olapTable .writeUnlock ();
0 commit comments