AlistGo/alist · error
[doubao_new] merge blocks missing seq %d
Error message
[doubao_new] merge blocks missing seq %d
What it means
Stricter companion check to 689: after building a success set from SuccessSeqList, at least one seq submitted in the merge group is absent from it. The message names the exact missing sequence number, which usually pinpoints the single rejected block.
Source
Thrown at drivers/doubao_new/driver.go:324
}
}
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()
if up != nil {
percent := float64(uploadedBytes) / float64(totalSize) * 100
up(percent)
}
return nil
}
for _, item := range needed.NeededUploadBlocks {View on GitHub (pinned to 843d9dc814)
Solutions
- Retry — re-query of needed blocks will re-submit only the missing seq
- If the same seq fails repeatedly, verify that block's bytes locally (compare adler32 against item.Checksum as the driver does) and check the source file region for corruption or concurrent modification
- Avoid uploading the same file from two clients simultaneously
- Re-authenticate the doubao_new session if merge responses look session-scoped
- Report the seq + checksum pair upstream if persistent
Defensive patterns
Strategy: retry
Try / catch
if err := flushGroup(); err != nil && strings.Contains(err.Error(), "merge blocks missing seq") {
time.Sleep(time.Second)
return d.uploadPass(ctx, ...) // single-seq stragglers clear on re-query
} Prevention
- Log the missing seq — a repeat offender pinpoints the corrupted block
- Prevent concurrent uploads of the same file from two clients
- Treat persistent single-seq failure as a checksum problem, not a merge problem
When it happens
Trigger: Same merge call as 689 but specifically identifies which seq the server skipped — typically one block whose server-side checksum validation failed, or a seq the server considered already merged/duplicated.
Common situations: Dedup races (block recorded as uploaded between submit and merge), single corrupted block, or server-side dedup collapsing duplicate seqs out of the success list.
Related errors
- [doubao_new] merge blocks incomplete: %v
- [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/eb35ea01680fdff8.
Report an issue: GitHub.