diff --git a/internal/biz/task.go b/internal/biz/task.go index 5711b6d4..9d59abcb 100644 --- a/internal/biz/task.go +++ b/internal/biz/task.go @@ -28,4 +28,5 @@ type TaskRepo interface { Delete(id uint) error UpdateStatus(id uint, status TaskStatus) error Push(task *Task) error + ClearZombieTasks() error } diff --git a/internal/data/task.go b/internal/data/task.go index a27e009e..414866e8 100644 --- a/internal/data/task.go +++ b/internal/data/task.go @@ -73,3 +73,10 @@ func (r *taskRepo) Push(task *biz.Task) error { task.ID, }) } + +func (r *taskRepo) ClearZombieTasks() error { + if err := r.db.Model(&biz.Task{}).Where("status = ? or status = ?", biz.TaskStatusRunning, biz.TaskStatusWaiting).Update("status", biz.TaskStatusFailed).Error; err != nil { + return err + } + return nil +}