Skip to content

fix: 必剪转写实例复用导致的上传状态残留与并发竞争#422

Open
pumpkinperson996 wants to merge 1 commit into
JefferyHcool:masterfrom
pumpkinperson996:fix/bcut-upload-session
Open

fix: 必剪转写实例复用导致的上传状态残留与并发竞争#422
pumpkinperson996 wants to merge 1 commit into
JefferyHcool:masterfrom
pumpkinperson996:fix/bcut-upload-session

Conversation

@pumpkinperson996

Copy link
Copy Markdown

问题

BcutTranscriber 实例被 transcriber_provider 缓存复用,但上传会话状态(__etags__upload_id 等)只在 __init__ 时初始化,__upload_part() 只做追加。后果:

  1. 串行残留:服务启动后第一次必剪转写成功,之后每次转写提交合并时携带的 etag 数量与本次分片数不符,B 站接口返回"第三方服务异常"。例如第一个视频 1 分片成功后,第二个视频 2 分片实际提交了 3 个 etag。
  2. 并发竞争:同时提交多个视频时,多个后台任务在同一实例上交错执行 _upload,分片上传日志互相穿插,一个视频的 etag 混入另一个视频的提交。

修复

  • _upload() 开头重置全部上传会话状态(__etags__in_boss_key__resource_id__upload_id__upload_urls__download_url
  • transcript()threading.Lock,整个"上传→提交→建任务→轮询结果"会话持锁串行执行。并发转写会排队;如需并发吞吐,后续可考虑改为每任务独立实例

测试

新增 backend/tests/test_bcut_state_reset.py:mock 必剪三步接口,同一实例连续上传 1 分片与 2 分片文件,断言第二次提交的 Etags 数量为 2(修复前为 3)。已在 Docker 镜像环境通过,并实测并发提交两个视频均转写成功。

🤖 Generated with Claude Code

BcutTranscriber 被 transcriber_provider 缓存复用,但 __etags 等上传
会话状态只在 __init__ 清空、每次上传只追加,导致容器启动后第二次
及以后的转写提交的 etag 数与分片数不符,B 站返回"第三方服务异常"。
并发提交多个视频时,多个后台任务还会在同一实例上交错上传,etag
互相混入。

- _upload() 开头重置全部上传会话状态,修串行残留
- transcript() 加实例锁,整个转写会话串行执行,修并发交错

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant