AlistGo/alist · error
[doubao_new] merge blocks incomplete: %v
Error message
[doubao_new] merge blocks incomplete: %v
What it means
Doubao_new merge response validation: the server's SuccessSeqList from mergeUploadBlocks contains fewer entries than the group of block seqs that were submitted. The server only merged some blocks, so the client refuses to consider the group uploaded.
Source
Thrown at drivers/doubao_new/driver.go:316
if len(data) > 0 {
headLen := 32
if len(data) < headLen {
headLen = len(data)
}
tailLen := 32
if len(data) < tailLen {
tailLen = len(data)
}
}
if int64(len(data)) != expectLen {
return fmt.Errorf("[doubao_new] merge blocks invalid body len: got=%d expect=%d seqs=%v", len(data), expectLen, groupSeqs)
}
mergeResp, err := d.mergeUploadBlocks(ctx, uploadPrep.UploadID, groupSeqs, groupChecksums, groupSizes, blockSize, data)
if err != nil {
return err
}
if len(mergeResp.SuccessSeqList) != len(groupSeqs) {
return fmt.Errorf("[doubao_new] merge blocks incomplete: %v", mergeResp.SuccessSeqList)
}
success := make(map[int]bool, len(mergeResp.SuccessSeqList))
for _, seq := range mergeResp.SuccessSeqList {
success[seq] = true
}
for _, seq := range groupSeqs {
if !success[seq] {
return fmt.Errorf("[doubao_new] merge blocks missing seq %d", seq)
}
}
uploadedBytes += groupRealSize
groupSeqs = groupSeqs[:0]
groupChecksums = groupChecksums[:0]
groupSizes = groupSizes[:0]
groupRealSize = 0
groupExpectSum = 0
groupBuf.Reset()View on GitHub (pinned to 843d9dc814)
Solutions
- Retry the upload pass — needed-blocks is re-queried so already-merged blocks drop out and only stragglers remain
- If the same block always fails, its checksum will surface in the block checksum mismatch error next — treat this as an early symptom
- Check for concurrent uploads of the same file from another client/session
- Re-authenticate; some partial-merge responses stem from expired session state on the merge endpoint
- Report upstream with the seq list if persistent
Defensive patterns
Strategy: retry
Try / catch
if err := flushGroup(); err != nil && strings.Contains(err.Error(), "merge blocks incomplete") {
// re-query needed blocks; already-merged seqs drop out and stragglers resubmit
return d.uploadPass(ctx, ...)
} Prevention
- Expect partial merge acceptance under load; always design for a re-query pass
- Avoid parallel merge-heavy uploads against the same space
- Re-authenticate if merges repeatedly return partial lists
When it happens
Trigger: mergeUploadBlocks responds 2xx but SuccessSeqList is short — server-side partial acceptance when one block in the group fails its checksum or is rejected, rate-limited merges dropping seqs, or a response parsing issue losing entries.
Common situations: Flaky server behavior under load, one corrupted block in a 20-block merge group (maxMergeBlockCount=20), API change returning success list under a different field so it unmarshals empty/partial, or interleaved dedup state where some blocks were already merged by a concurrent session.
Related errors
- [doubao_new] merge blocks missing seq %d
- [doubao_new] merge blocks invalid body len: got=%d expect=%d
- [doubao_new] missing block meta for seq %d
- [doubao_new] invalid block size from needed list: seq=%d siz
- [doubao_new] short read: seq=%d want=%d got=%d
AI-assisted analysis of AlistGo/alist@843d9dc814 (2026-08-15).
Data as JSON: /api/errors/ada5a84f41ac6156.
Report an issue: GitHub.