@@ -1032,29 +1032,27 @@ private void executeBeforeCheck(TransactionState txnState, TransactionStatus tra
10321032 // paused job or renew task
10331033 // *** Please do not call after individually. It must be combined use with before ***
10341034 @ Override
1035- public void afterCommitted (TransactionState txnState , boolean txnOperated ) throws StarRocksException {
1035+ public void afterCommitted (TransactionState txnState ) throws StarRocksException {
10361036 long taskBeId = -1L ;
10371037 try {
1038- if (txnOperated ) {
1039- // find task in job
1040- Optional <RoutineLoadTaskInfo > routineLoadTaskInfoOptional = routineLoadTaskInfoList .stream ().filter (
1041- entity -> entity .getTxnId () == txnState .getTransactionId ()).findFirst ();
1042- if (routineLoadTaskInfoOptional .isPresent ()) {
1043- RoutineLoadTaskInfo routineLoadTaskInfo = routineLoadTaskInfoOptional .get ();
1044- taskBeId = routineLoadTaskInfo .getBeId ();
1045- executeTaskOnTxnStatusChanged (routineLoadTaskInfo , txnState , TransactionStatus .COMMITTED , null );
1046- routineLoadTaskInfo .afterCommitted (txnState , txnOperated );
1047- }
1048- ++committedTaskNum ;
1049- TableMetricsEntity entity = TableMetricsRegistry .getInstance ().getMetricsEntity (tableId );
1050- entity .counterRoutineLoadCommittedTasksTotal .increase (1L );
1051- LOG .debug ("routine load task committed. task id: {}, job id: {}" , txnState .getLabel (), id );
1052-
1053- StreamLoadTask streamLoadTask = GlobalStateMgr .getCurrentState ().getStreamLoadMgr ().
1054- getSyncSteamLoadTaskByTxnId (txnState .getTransactionId ());
1055- if (streamLoadTask != null ) {
1056- streamLoadTask .afterCommitted (txnState , txnOperated );
1057- }
1038+ // find task in job
1039+ Optional <RoutineLoadTaskInfo > routineLoadTaskInfoOptional = routineLoadTaskInfoList .stream ().filter (
1040+ entity -> entity .getTxnId () == txnState .getTransactionId ()).findFirst ();
1041+ if (routineLoadTaskInfoOptional .isPresent ()) {
1042+ RoutineLoadTaskInfo routineLoadTaskInfo = routineLoadTaskInfoOptional .get ();
1043+ taskBeId = routineLoadTaskInfo .getBeId ();
1044+ executeTaskOnTxnStatusChanged (routineLoadTaskInfo , txnState , TransactionStatus .COMMITTED , null );
1045+ routineLoadTaskInfo .afterCommitted (txnState );
1046+ }
1047+ ++committedTaskNum ;
1048+ TableMetricsEntity entity = TableMetricsRegistry .getInstance ().getMetricsEntity (tableId );
1049+ entity .counterRoutineLoadCommittedTasksTotal .increase (1L );
1050+ LOG .debug ("routine load task committed. task id: {}, job id: {}" , txnState .getLabel (), id );
1051+
1052+ StreamLoadTask streamLoadTask = GlobalStateMgr .getCurrentState ().getStreamLoadMgr ().
1053+ getSyncSteamLoadTaskByTxnId (txnState .getTransactionId ());
1054+ if (streamLoadTask != null ) {
1055+ streamLoadTask .afterCommitted (txnState );
10581056 }
10591057 } catch (Throwable e ) {
10601058 LOG .warn ("after committed failed" , e );
@@ -1086,19 +1084,7 @@ public void replayOnCommitted(TransactionState txnState) {
10861084 * the corresponding txn is visible, create a new task
10871085 */
10881086 @ Override
1089- public void afterVisible (TransactionState txnState , boolean txnOperated ) {
1090- if (!txnOperated ) {
1091- String msg = String .format (
1092- "should not happen, we find that txnOperated if false when handling afterVisble. job id: %d, txn_id: %d" ,
1093- id , txnState .getTransactionId ());
1094- LOG .warn (msg );
1095- // print a log and return.
1096- // if this really happen, the job will be blocked, and this task can be seen by
1097- // "show routine load task" stmt, which is in COMMITTED state for a long time.
1098- // so we can find this error and step in.
1099- return ;
1100- }
1101-
1087+ public void afterVisible (TransactionState txnState ) {
11021088 writeLock ();
11031089 try {
11041090 if (state != JobState .RUNNING ) {
@@ -1109,7 +1095,7 @@ public void afterVisible(TransactionState txnState, boolean txnOperated) {
11091095 StreamLoadTask streamLoadTask = GlobalStateMgr .getCurrentState ().getStreamLoadMgr ().
11101096 getSyncSteamLoadTaskByTxnId (txnState .getTransactionId ());
11111097 if (streamLoadTask != null ) {
1112- streamLoadTask .afterVisible (txnState , txnOperated );
1098+ streamLoadTask .afterVisible (txnState );
11131099 }
11141100
11151101 Optional <RoutineLoadTaskInfo > routineLoadTaskInfoOptional = routineLoadTaskInfoList .stream ().filter (
@@ -1144,7 +1130,7 @@ public void afterVisible(TransactionState txnState, boolean txnOperated) {
11441130 }
11451131
11461132 try {
1147- routineLoadTaskInfo .afterVisible (txnState , txnOperated );
1133+ routineLoadTaskInfo .afterVisible (txnState );
11481134 } catch (StarRocksException e ) {
11491135 LOG .warn ("failed to execute 'routineLoadTaskInfo.afterVisible', txnId {}, label {}. " +
11501136 "this should not happen" , txnState .getTransactionId (), routineLoadTaskInfo .getLabel ());
@@ -1177,65 +1163,63 @@ public void afterVisible(TransactionState txnState, boolean txnOperated) {
11771163 // progress will be update otherwise the progress will be hung
11781164 // *** Please do not call after individually. It must be combined use with before ***
11791165 @ Override
1180- public void afterAborted (TransactionState txnState , boolean txnOperated , String txnStatusChangeReasonString )
1166+ public void afterAborted (TransactionState txnState , String txnStatusChangeReasonString )
11811167 throws StarRocksException {
11821168 long taskBeId = -1L ;
11831169 try {
1184- if (txnOperated ) {
1185- StreamLoadTask streamLoadTask = GlobalStateMgr .getCurrentState ().getStreamLoadMgr ().
1186- getSyncSteamLoadTaskByTxnId (txnState .getTransactionId ());
1187- if (streamLoadTask != null ) {
1188- streamLoadTask .afterAborted (txnState , txnOperated , txnStatusChangeReasonString );
1189- }
1170+ StreamLoadTask streamLoadTask = GlobalStateMgr .getCurrentState ().getStreamLoadMgr ().
1171+ getSyncSteamLoadTaskByTxnId (txnState .getTransactionId ());
1172+ if (streamLoadTask != null ) {
1173+ streamLoadTask .afterAborted (txnState , txnStatusChangeReasonString );
1174+ }
11901175
1191- // step0: find task in job
1192- Optional <RoutineLoadTaskInfo > routineLoadTaskInfoOptional = routineLoadTaskInfoList .stream ().filter (
1193- entity -> entity .getTxnId () == txnState .getTransactionId ()).findFirst ();
1194- TableMetricsEntity entity = TableMetricsRegistry .getInstance ().getMetricsEntity (tableId );
1195- if (!routineLoadTaskInfoOptional .isPresent ()) {
1196- // The task of the timed-out transaction will be detected by the transaction checker thread
1197- // and subsequently aborted. Here, we need to update the abortedTaskNum.
1198- ++abortedTaskNum ;
1199- entity .counterRoutineLoadAbortedTasksTotal .increase (1L );
1200- // task will not be update when task has been aborted by fe
1201- return ;
1202- }
1203- RoutineLoadTaskInfo routineLoadTaskInfo = routineLoadTaskInfoOptional .get ();
1204- taskBeId = routineLoadTaskInfo .getBeId ();
1205- // step1: job state will be changed depending on txnStatusChangeReasonString
1206- if (LOG .isDebugEnabled ()) {
1207- LOG .debug (new LogBuilder (LogKey .ROUTINE_LOAD_TASK , txnState .getLabel ())
1208- .add ("txn_id" , txnState .getTransactionId ())
1209- .add ("msg" , "txn abort with reason " + txnStatusChangeReasonString )
1210- .build ());
1211- }
1212- routineLoadTaskInfo .afterAborted (txnState , txnOperated , txnStatusChangeReasonString );
1176+ // step0: find task in job
1177+ Optional <RoutineLoadTaskInfo > routineLoadTaskInfoOptional = routineLoadTaskInfoList .stream ().filter (
1178+ entity -> entity .getTxnId () == txnState .getTransactionId ()).findFirst ();
1179+ TableMetricsEntity entity = TableMetricsRegistry .getInstance ().getMetricsEntity (tableId );
1180+ if (!routineLoadTaskInfoOptional .isPresent ()) {
1181+ // The task of the timed-out transaction will be detected by the transaction checker thread
1182+ // and subsequently aborted. Here, we need to update the abortedTaskNum.
12131183 ++abortedTaskNum ;
12141184 entity .counterRoutineLoadAbortedTasksTotal .increase (1L );
1215- setOtherMsg (txnStatusChangeReasonString );
1216- TxnStatusChangeReason txnStatusChangeReason = null ;
1217- if (txnStatusChangeReasonString != null ) {
1218- txnStatusChangeReason =
1219- TxnStatusChangeReason .fromString (txnStatusChangeReasonString );
1220- if (txnStatusChangeReason != null ) {
1221- switch (txnStatusChangeReason ) {
1222- case OFFSET_OUT_OF_RANGE :
1223- case PAUSE :
1224- String msg = "be " + taskBeId + " abort task "
1225- + "with reason: " + txnStatusChangeReasonString ;
1226- updateState (JobState .PAUSED ,
1227- new ErrorReason (InternalErrorCode .TASKS_ABORT_ERR , msg ));
1228- return ;
1229- default :
1230- break ;
1231- }
1185+ // task will not be update when task has been aborted by fe
1186+ return ;
1187+ }
1188+ RoutineLoadTaskInfo routineLoadTaskInfo = routineLoadTaskInfoOptional .get ();
1189+ taskBeId = routineLoadTaskInfo .getBeId ();
1190+ // step1: job state will be changed depending on txnStatusChangeReasonString
1191+ if (LOG .isDebugEnabled ()) {
1192+ LOG .debug (new LogBuilder (LogKey .ROUTINE_LOAD_TASK , txnState .getLabel ())
1193+ .add ("txn_id" , txnState .getTransactionId ())
1194+ .add ("msg" , "txn abort with reason " + txnStatusChangeReasonString )
1195+ .build ());
1196+ }
1197+ routineLoadTaskInfo .afterAborted (txnState , txnStatusChangeReasonString );
1198+ ++abortedTaskNum ;
1199+ entity .counterRoutineLoadAbortedTasksTotal .increase (1L );
1200+ setOtherMsg (txnStatusChangeReasonString );
1201+ TxnStatusChangeReason txnStatusChangeReason = null ;
1202+ if (txnStatusChangeReasonString != null ) {
1203+ txnStatusChangeReason =
1204+ TxnStatusChangeReason .fromString (txnStatusChangeReasonString );
1205+ if (txnStatusChangeReason != null ) {
1206+ switch (txnStatusChangeReason ) {
1207+ case OFFSET_OUT_OF_RANGE :
1208+ case PAUSE :
1209+ String msg = "be " + taskBeId + " abort task "
1210+ + "with reason: " + txnStatusChangeReasonString ;
1211+ updateState (JobState .PAUSED ,
1212+ new ErrorReason (InternalErrorCode .TASKS_ABORT_ERR , msg ));
1213+ return ;
1214+ default :
1215+ break ;
12321216 }
1233- // TODO(ml): use previous be id depend on change reason
12341217 }
1235- // step2: commit task , update progress, maybe create a new task
1236- executeTaskOnTxnStatusChanged (routineLoadTaskInfo , txnState , TransactionStatus .ABORTED ,
1237- txnStatusChangeReasonString );
1218+ // TODO(ml): use previous be id depend on change reason
12381219 }
1220+ // step2: commit task , update progress, maybe create a new task
1221+ executeTaskOnTxnStatusChanged (routineLoadTaskInfo , txnState , TransactionStatus .ABORTED ,
1222+ txnStatusChangeReasonString );
12391223 } catch (Exception e ) {
12401224 String msg =
12411225 "be " + taskBeId + " abort task " + txnState .getLabel () + " failed with error " + e .getMessage ();
0 commit comments