AlistGo/alist · error
wukong apply upload inner returns empty upload node
Error message
wukong apply upload inner returns empty upload node
What it means
Thrown after a successful apply-upload-inner call when the response contains no UploadNodes, or its first node has no StoreInfos. The driver has already picked candidate hosts and applied for an upload slot, but the server did not allocate an upload node (host + StoreURI + auth tuple), so there is nowhere to PUT the bytes.
Source
Thrown at drivers/wukong/driver.go:351
up(10)
candidates, err := d.getUploadCandidates(ctx, authToken)
if err != nil {
return err
}
bestHosts := collectCandidateHosts(candidates)
if len(bestHosts) == 0 {
return errors.New("wukong upload candidates is empty")
}
up(20)
applyResp, err := d.applyUploadInner(ctx, authToken, uploadType, size, strings.Join(bestHosts, ","))
if err != nil {
return err
}
if len(applyResp.Result.InnerUploadAddress.UploadNodes) == 0 ||
len(applyResp.Result.InnerUploadAddress.UploadNodes[0].StoreInfos) == 0 {
return errors.New("wukong apply upload inner returns empty upload node")
}
node := applyResp.Result.InnerUploadAddress.UploadNodes[0]
store := node.StoreInfos[0]
up(30)
if size > multipartChunkSize {
if err = d.uploadToTOSMultipart(ctx, node.UploadHost, store.StoreURI, store.Auth, getStorageUserID(store.StorageHeader), tempFile, size, up); err != nil {
return err
}
} else {
if _, err = tempFile.Seek(0, io.SeekStart); err != nil {
return err
}
reader := &driver.ReaderUpdatingProgress{
Reader: &driver.SimpleReaderWithSize{Reader: tempFile, Size: size},
UpdateProgress: func(percent float64) {
up(30 + percent*0.5)
},View on GitHub (pinned to 843d9dc814)
Solutions
- Retry later — transient provisioning failures on the wkbrowser backend produce empty node lists
- Check the account's storage quota on pan.wkbrowser.com and free space if full
- Update the driver in case the InnerUploadAddress response shape changed
- Try a smaller file to distinguish size-dependent rejection from a general failure
Defensive patterns
Strategy: retry
Try / catch
if err != nil && strings.Contains(err.Error(), "empty upload node") {
// re-run full apply flow after delay; nodes are provisioned per-attempt
time.Sleep(10 * time.Second)
return d.Put(ctx, dstDir, file, up)
} Prevention
- Check account quota before large uploads
- Always restart the whole apply flow on failure — never reuse StoreInfos from a failed attempt
- Update driver when the wkbrowser upload API changes
When it happens
Trigger: applyUploadInner returns code 0 but Result.InnerUploadAddress.UploadNodes is empty, or UploadNodes[0].StoreInfos is empty — quota exhaustion, server-side upload capacity issues, an account not entitled to upload, or a response-schema change.
Common situations: Wukong account hit a storage/quota limit; uploading unusually large or zero-byte files the backend rejects at apply time; provider API drift; temporary backend incidents.
Related errors
- wukong upload candidates is empty
- wukong video upload missing vid in commit response
- wukong init multipart upload returns empty uploadid
- invalid multipart parts
- 123 offline download cannot target the root directory, pick
AI-assisted analysis of AlistGo/alist@843d9dc814 (2026-08-15).
Data as JSON: /api/errors/0d1fca5485915a9a.
Report an issue: GitHub.