{"record":{"id":"eb35ea01680fdff8","repo":"AlistGo/alist","slug":"doubao-new-merge-blocks-missing-seq-d","errorCode":null,"errorMessage":"[doubao_new] merge blocks missing seq %d","messagePattern":"\\[doubao_new\\] merge blocks missing seq (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"drivers/doubao_new/driver.go","lineNumber":324,"sourceCode":"\t\t\t\t}\n\t\t\t}\n\t\t\tif int64(len(data)) != expectLen {\n\t\t\t\treturn fmt.Errorf(\"[doubao_new] merge blocks invalid body len: got=%d expect=%d seqs=%v\", len(data), expectLen, groupSeqs)\n\t\t\t}\n\t\t\tmergeResp, err := d.mergeUploadBlocks(ctx, uploadPrep.UploadID, groupSeqs, groupChecksums, groupSizes, blockSize, data)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif len(mergeResp.SuccessSeqList) != len(groupSeqs) {\n\t\t\t\treturn fmt.Errorf(\"[doubao_new] merge blocks incomplete: %v\", mergeResp.SuccessSeqList)\n\t\t\t}\n\t\t\tsuccess := make(map[int]bool, len(mergeResp.SuccessSeqList))\n\t\t\tfor _, seq := range mergeResp.SuccessSeqList {\n\t\t\t\tsuccess[seq] = true\n\t\t\t}\n\t\t\tfor _, seq := range groupSeqs {\n\t\t\t\tif !success[seq] {\n\t\t\t\t\treturn fmt.Errorf(\"[doubao_new] merge blocks missing seq %d\", seq)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tuploadedBytes += groupRealSize\n\t\t\tgroupSeqs = groupSeqs[:0]\n\t\t\tgroupChecksums = groupChecksums[:0]\n\t\t\tgroupSizes = groupSizes[:0]\n\t\t\tgroupRealSize = 0\n\t\t\tgroupExpectSum = 0\n\t\t\tgroupBuf.Reset()\n\t\t\tif up != nil {\n\t\t\t\tpercent := float64(uploadedBytes) / float64(totalSize) * 100\n\t\t\t\tup(percent)\n\t\t\t}\n\t\t\treturn nil\n\t\t}\n\n\t\tfor _, item := range needed.NeededUploadBlocks {","sourceCodeStart":306,"sourceCodeEnd":342,"githubUrl":"https://github.com/AlistGo/alist/blob/843d9dc8149126976b2625911e45a4d3ffd6f2f5/drivers/doubao_new/driver.go#L306-L342","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"if err := flushGroup(); err != nil && strings.Contains(err.Error(), \"merge blocks missing seq\") {\n    time.Sleep(time.Second)\n    return d.uploadPass(ctx, ...) // single-seq stragglers clear on re-query\n}","preventionTips":["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"],"tags":["doubao-new","upload","merge","block","go"],"backgroundTag":null,"analyzedSha":"843d9dc8149126976b2625911e45a4d3ffd6f2f5","analyzedAt":"2026-08-15T12:14:11.722Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}