mirror of
https://github.com/go-gitea/gitea.git
synced 2026-08-06 23:16:08 +00:00
Backport #38792 by @silverwind `UpdateTaskByState` wrote the task, its job and its steps in separate statements. An interruption in between left the task finished with a running job, so the run stayed in progress, and the "state is final" early return made every retry, cancel and cleanup a no-op. Fixes https://github.com/go-gitea/gitea/issues/38790 Co-authored-by: silverwind <me@silverwind.io>
This commit is contained in:
@@ -478,7 +478,7 @@ func UpdateTaskByState(ctx context.Context, runnerID int64, state *runnerv1.Task
|
||||
return nil, err
|
||||
}
|
||||
task := &ActionTask{}
|
||||
err = globallock.LockAndDo(ctx, fmt.Sprintf("UpdateTaskByState-run-%d", runID), func(ctx context.Context) error {
|
||||
applyState := func(ctx context.Context) error {
|
||||
if has, err := db.GetEngine(ctx).ID(taskID).Get(task); err != nil {
|
||||
return err
|
||||
} else if !has {
|
||||
@@ -543,6 +543,10 @@ func UpdateTaskByState(ctx context.Context, runnerID int64, state *runnerv1.Task
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
err = globallock.LockAndDo(ctx, fmt.Sprintf("UpdateTaskByState-run-%d", runID), func(ctx context.Context) error {
|
||||
// A half-written report leaves the task done with a running job, which no retry repairs.
|
||||
return db.WithTx(ctx, applyState)
|
||||
})
|
||||
return task, err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user