上传错误标记写库故障会跳过接收资源释放 #204
Copy link
Copy link
Closed
Labels
bugSomething isn't workingSomething isn't working优先级:P2质量债、待拍板的产品决策、可选优化质量债、待拍板的产品决策、可选优化处置:待修已有明确修复边界,待确认设计或派发实现已有明确修复边界,待确认设计或派发实现落点:本仓修复代码在本仓 git 跟踪路径内修复代码在本仓 git 跟踪路径内领域:本地上传媒体上传、资源生命周期与上传全链测试媒体上传、资源生命周期与上传全链测试
Description
结论与范围
PR #203 固定候选 6a497263e67789b4ce8fef39d407e6e8f77faff3 的上传失败处理:写入错误标记发生SQLite异常时,会在finally中跳过其后的文件、接收槽、inflight及临时预算释放。当前个人4-5可信朋友规模、数据库故障条件下按P2接受不修,记录后续最小改进;不阻断本批,也不添防御架构。不是声称主干/生产已触发:该功能尚未合并/启用。
位置/证据
src/video_transcript_api/api/routes/uploads.py:347-360,标记错误在所有接收资源回收之前。- 新独立审查Git产物:
b1c3c4783bc4052e5568289b77be37d7ffed312c/docs/sessions/261008-local-upload/reviews/B-r3-verdict.md。 - 真实临时SQLite/TestClient/raw stream故障注入:发实收字节小于metadata.byte_size的请求,触发declared_size_mismatch;仅注入
set_local_upload_error -> sqlite3.OperationalError。结果HTTP500/bodyreads1/receipt.error_code null/inflight_count1/reserved_bytes_count1/leaked_upload_files_count1,接收槽释放也跳过。注入验证控制流,不证明生产SQLite故障频率。
当前接受理由与未知
故障已有HTTP500,不是静默成功;没有已受理媒体/既有成果丢失或越权证据。后果是未移交接收资源残留,数据库恢复后上传入口可能因额度耗尽持续拒绝直到重启。对当前个人小规模可暂接受,不能因为默认off就声称不存在缺陷。生产频率、实际恢复域、容量未知,上传默认关闭且上线另验收。本项不同于此前仅错误码缺失/标签不准确的P2/P3,是新资源残留证据;其余正常发布、commit失败dispatcher拒绝、cleanup所有权等回归仍绿。
后续最小修正边界(不是本批新卡)
保持SQLite错误fail-fast上抛/HTTP500,同时不让错误码写库短路既有资源回收。仅局部顺序或现有finally重排;不新增retry/fallback/广泛catch/状态/配置/服务。测试锁真实handler故障后临时文件/接收槽/inflight/预算均归零且错误仍明确,保留producer真实headers/body/SQLite/队列fixture。无需在本批新增循环或扩大架构。
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working优先级:P2质量债、待拍板的产品决策、可选优化质量债、待拍板的产品决策、可选优化处置:待修已有明确修复边界,待确认设计或派发实现已有明确修复边界,待确认设计或派发实现落点:本仓修复代码在本仓 git 跟踪路径内修复代码在本仓 git 跟踪路径内领域:本地上传媒体上传、资源生命周期与上传全链测试媒体上传、资源生命周期与上传全链测试
Activity
zj1123581321 commentedon Oct 12, 2026
分诊更新(2026-10-12)
当前主干真实 handler + SQLite + raw stream 注入 set_local_upload_error 写库失败,命中 declared_size_mismatch 后 HTTP 500;接收槽/inflight/临时预算及未移交目录释放被跳过。旧接受不修是当时取舍,本次按用户批量修复请求列入增量 B。仍 P2,写库错误保持 fail-fast,回收不依赖错误记录成功,成功移交媒体不误删。尚未修复。
基线:
c7dc7fcbb1727057ecf2c4d8c3f38e34d3136f72。证据初稿:分支card/vta-261012-triage-audit的docs/sessions/261012-issue-triage/triage.md;设计仍在收紧,未激活产品修复卡。[-]P2:上传错误标记写库故障会跳过接收资源释放(接受不修)[/-][+]上传错误标记写库故障会跳过接收资源释放[/+]zj1123581321 commentedon Oct 12, 2026
Opus复核:降级原四卡设计(2026-10-12)
Opus复核指出真正后果是请求槽/在途额度被占住;若 receive_concurrency=1,槽泄漏可让后续全部上传503直到重启。方案改为各资源按所有权释放:请求槽由外层finally独立释放,未移交inflight不受写库或目录清理异常短路;写库/清理错误仍明确上抛。文件删除失败时预算不应被误认成磁盘已回收,具体保留与回收规则需按现有账本确认,不增加新框架。24小时清理只针对receiving记录,不保证所有失败目录自动自愈。生产启用与实际并发未知,暂保持P2。尚未实现。
原设计提交0fd2fd67是此前方案;上述收紧意见优先,待用户确认后再修订设计和正式派卡。当前没有产品代码改动或部署。
上传接收失败不再短路请求槽与未移交在途资源释放(Refs #204)
B接收rowcount路径回归与design事实收紧(Refs #204)
zj1123581321 commentedon Oct 12, 2026
最小资源释放修复已进入草稿 PR: #236 。只调整现有 finally 控制流,不加资源框架、状态、重试或兜底。
请求槽放在最外层释放;未移交的 inflight 不受错误写库或目录清理失败阻断;若目录确实仍在,保留对应预算,不能假报磁盘空间已回收。成功移交仍由 worker 管理媒体和账本。
验收发现原卡要求的“真实 SQLite rowcount 不匹配导致 ValueError”覆盖尚缺,已回派补测试;同时删除文档中无证据的“所有失败目录 24 小时自愈”保证。待补齐后冻结最终提交做独立审查及完整 CI。暂不关 issue,维持 P2,不声称已部署或已在生产验证。
B接收worker消费起点资源持有回归(Refs #204)
design契约事实精确化与第5段进度存档(Refs #204)
Merge pull request #236 from zlxlabs/card/vta-261012-upload-release
zj1123581321 commentedon Oct 12, 2026
已正常交付:PR #236 的最新头
d67e2beec719a2f732d6a56afc7c5a5adb815160在完整 ready 门禁全通过、pr_merge_ready=READY 后按精确 head 合并,默认分支权威 SHA 为1bc3b50e29296612c2d162582158b4abf71d3f43。已锁定的行为
验收
778d211e040ee550ba8fd7499e72b7f1fd28eb30。没有执行部署操作或生产探活,生产状态未探测。关闭上传 writer 故障短路资源释放问题。