AlistGo/alist · warning
upload task %s timeout
Error message
upload task %s timeout
What it means
waitUploadTaskInfo exhausted its polling budget without FileID appearing, a terminal code, or an error msg - the upload task stayed in an in-progress state (codes 145/146/147/155/163/0) the whole time. Like the waitTaskDone timeout, the task may still finish server-side.
Source
Thrown at drivers/guangyapan/driver.go:964
}
switch out.Code {
case 145, 146, 147, 155, 163, 0:
// uploading/verifying/processing
default:
if strings.TrimSpace(out.Msg) != "" {
return fmt.Errorf("upload task failed: code=%d msg=%s", out.Code, strings.TrimSpace(out.Msg))
}
}
if i == maxTry-1 {
break
}
select {
case <-ctx.Done():
return ctx.Err()
case <-time.After(interval):
}
}
return fmt.Errorf("upload task %s timeout", taskID)
}
func (d *GuangYaPan) multipartUploadToOSS(ctx context.Context, bucket *oss.Bucket, objectPath string, file model.FileStreamer, up driver.UpdateProgress) error {
partSize := calcUploadPartSize(file.GetSize())
imur, err := bucket.InitiateMultipartUpload(objectPath, oss.Sequential())
if err != nil {
return err
}
total := file.GetSize()
partCount := int((total + partSize - 1) / partSize)
parts := make([]oss.UploadPart, 0, partCount)
var uploaded int64
partNumber := 1
for uploaded < total {
if err := ctx.Err(); err != nil {
return errView on GitHub (pinned to 843d9dc814)
Solutions
- Re-list the destination after a delay - the file usually appears once processing completes.
- Retry the upload if the file never lands.
- Driver maintainers can scale maxTry/interval with file size.
Defensive patterns
Strategy: fallback
Try / catch
if err := d.waitUploadTaskInfo(ctx, taskID); err != nil {
if strings.Contains(err.Error(), "timeout") {
// fallback: verify by listing instead of failing the upload
time.Sleep(5 * time.Second)
if obj, _ := d.getObjByPath(ctx, objectPath); obj != nil {
return nil // upload actually completed
}
}
return err
} Prevention
- For multi-GB uploads, verify via destination listing rather than trusting the poll window.
- Expect longer ingest times under provider load and pad waits accordingly.
When it happens
Trigger: Large files whose server-side verification/processing outlasts the fixed poll window after the OSS multipart upload completed.
Common situations: Uploading multi-GB files where ingest takes minutes; provider under load; the poll budget being tuned for small files.
Understand the failure class
- Timeouts: ETIMEDOUT, deadlines, and hung requests — what actually expires when a request times out.
Related errors
AI-assisted analysis of AlistGo/alist@843d9dc814 (2026-08-15).
Data as JSON: /api/errors/fc65c20c77f2f260.
Report an issue: GitHub.