AlistGo/alist · error
upload failed after %d retries due to server errors, error:
Error message
upload failed after %d retries due to server errors, error: %s
What it means
Fatal retry exhaustion in Cloudreve v4's remote-protocol chunked upload (upRemote). Chunks are POSTed through the Cloudreve server with exponential backoff on error; after maxRetries consecutive failures the upload aborts with this message embedding the last error (often the server's error payload).
Source
Thrown at drivers/cloudreve_v4/util.go:317
var up Resp
err = json.Unmarshal(body, &up)
if err != nil {
return err
}
if up.Code != 0 {
return errors.New(up.Msg)
}
return nil
}()
if err == nil {
retryCount = 0
finish += byteSize
up(float64(finish) * 100 / float64(file.GetSize()))
chunk++
} else {
retryCount++
if retryCount > maxRetries {
return fmt.Errorf("upload failed after %d retries due to server errors, error: %s", maxRetries, err)
}
backoff := time.Duration(1<<retryCount) * time.Second
utils.Log.Warnf("[Cloudreve-Remote] server errors while uploading, retrying after %v...", backoff)
time.Sleep(backoff)
}
}
return nil
}
func (d *CloudreveV4) upOneDrive(ctx context.Context, file model.FileStreamer, u FileUploadResp, up driver.UpdateProgress) error {
uploadUrl := u.UploadUrls[0]
var finish int64 = 0
DEFAULT := int64(u.ChunkSize)
retryCount := 0
maxRetries := 3
for finish < file.GetSize() {
if utils.IsCanceled(ctx) {
return ctx.Err()View on GitHub (pinned to 843d9dc814)
Solutions
- Inspect the embedded server error and the Cloudreve v4 server logs to find the failing step
- Restore the server's storage policy health / free disk space, then re-upload
- Restart the upload to obtain a fresh session if the old one expired
- Use smaller chunks or retry later when the server is stable
Defensive patterns
Strategy: retry
Validate before calling
// pre-flight: confirm session and upload URLs are present
if u.SessionID == "" || len(u.UploadUrls) == 0 {
return errors.New("invalid v4 upload session; request a new one")
} Try / catch
if err := d.upRemote(ctx, file, u, up); err != nil {
if strings.Contains(err.Error(), "upload failed after") {
time.Sleep(2 * time.Minute)
// one full restart with a fresh session, then report
}
} Prevention
- Check Cloudreve v4 server and its storage policy health before large uploads
- Restart uploads with fresh sessions after exhaustion instead of hammering retries
- Track per-server failure rates and back off degraded instances
When it happens
Trigger: A Cloudreve v4 upload session where each chunk request errors maxRetries+1 times consecutively — server 5xx, server-side storage policy failure (its OneDrive/S3 backing down), quota exhaustion, or an expired upload session returning errors per chunk.
Common situations: Cloudreve v4 server's storage policy unhealthy; server disk full; large uploads over unstable links where every retry fails; version mismatch between client expectations and the v4 API session lifecycle.
Related errors
- upload failed after %d retries due to server errors, error:
- upload failed after %d retries due to server errors, error %
- upload failed after %d retries due to server errors
- upload failed after %d retries due to server errors, error %
- up status: %d, error: %s
AI-assisted analysis of AlistGo/alist@843d9dc814 (2026-08-15).
Data as JSON: /api/errors/39af66f03cb45f1b.
Report an issue: GitHub.