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 err

View on GitHub (pinned to 843d9dc814)

Solutions

  1. Re-list the destination after a delay - the file usually appears once processing completes.
  2. Retry the upload if the file never lands.
  3. 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

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

Related errors


AI-assisted analysis of AlistGo/alist@843d9dc814 (2026-08-15). Data as JSON: /api/errors/fc65c20c77f2f260. Report an issue: GitHub.