AlistGo/alist · warning
canceled
Error message
canceled
What it means
Status maps offlineStatusCanceled to status.Err with the bare text "canceled". This means the task was canceled on the provider side (by a user in the GuangYaPan app, by quota policy, or by an earlier DeleteOfflineTasks call) rather than failing on its own. The wrapper cannot distinguish who canceled it.
Source
Thrown at internal/offline_download/guangyapan/guangyapan.go:121
return nil, errors.New("GuangYaPan offline download only supports GuangYaPan destination storage")
}
tasks, err := g.GetTasks(driver, task.GID)
if err != nil {
return nil, err
}
status := &tool.Status{
Status: "the task has been deleted",
}
for _, t := range tasks {
if t.TaskID != task.GID {
continue
}
status.Progress = float64(t.Progress)
status.TotalBytes = t.TotalSize
status.Completed = t.Status == offlineStatusCompleted || t.Status == offlineStatusPartiallyCompleted
status.Status = taskStatusText(t)
if t.Status == offlineStatusFailed || t.Status == offlineStatusCanceled {
status.Err = errors.New(status.Status)
}
return status, nil
}
status.Err = errors.New("the task has been deleted")
return status, nil
}
func init() {
tool.Tools.Add(&GuangYaPan{})
}
View on GitHub (pinned to 843d9dc814)
Solutions
- If the task was intentionally canceled, delete the local task record so polling stops
- If canceled by mistake, re-add the URL via AddURL
- Avoid calling Remove and Status concurrently for the same GID
Defensive patterns
Strategy: try-catch
Try / catch
if st.Err != nil && st.Status == "canceled" {
// distinguish cancel from failure for UX
markTaskCanceled(task) // do not show as error
} Prevention
- Do not call Remove and Status concurrently for the same task
- Serialize lifecycle transitions per GID (add/remove/poll) with a per-task lock
- If cancellation is unexpected, audit other sessions using the same provider account
When it happens
Trigger: Polling GuangYaPan.Status when t.Status == offlineStatusCanceled — e.g. someone canceled the task in the provider's own UI, or a Remove/retry flow deleted it while the status poller still tracks it.
Common situations: Task canceled in the GuangYaPan app by another session; a concurrent Remove(task) racing a Status poll; provider auto-cancel on duplicate tasks.
Related errors
- offline url is empty
- create offline task failed: empty task id
- GuangYaPan offline download only supports GuangYaPan destina
- failed
- the task has been deleted
AI-assisted analysis of AlistGo/alist@843d9dc814 (2026-08-15).
Data as JSON: /api/errors/811d79a34bf73868.
Report an issue: GitHub.