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

  1. Retry — re-query of needed blocks will re-submit only the missing seq
  2. 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
  3. Avoid uploading the same file from two clients simultaneously
  4. Re-authenticate the doubao_new session if merge responses look session-scoped
  5. 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

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


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