Skip to content

上传错误标记写库故障会跳过接收资源释放 #204

Closed

Description

@zj1123581321

结论与范围

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。无需在本批新增循环或扩大架构。

Activity

  1. added
    优先级:P2质量债、待拍板的产品决策、可选优化
    落点:本仓修复代码在本仓 git 跟踪路径内
    领域:本地上传媒体上传、资源生命周期与上传全链测试
    bugSomething isn't working
    处置:待修已有明确修复边界,待确认设计或派发实现
    on Oct 10, 2026
  2. zj1123581321 commented on Oct 12, 2026

    @zj1123581321
    CollaboratorAuthor

    分诊更新(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;设计仍在收紧,未激活产品修复卡。

  3. changed the title [-]P2:上传错误标记写库故障会跳过接收资源释放(接受不修)[/-] [+]上传错误标记写库故障会跳过接收资源释放[/+] on Oct 12, 2026
  4. zj1123581321 commented on Oct 12, 2026

    @zj1123581321
    CollaboratorAuthor

    Opus复核:降级原四卡设计(2026-10-12)

    Opus复核指出真正后果是请求槽/在途额度被占住;若 receive_concurrency=1,槽泄漏可让后续全部上传503直到重启。方案改为各资源按所有权释放:请求槽由外层finally独立释放,未移交inflight不受写库或目录清理异常短路;写库/清理错误仍明确上抛。文件删除失败时预算不应被误认成磁盘已回收,具体保留与回收规则需按现有账本确认,不增加新框架。24小时清理只针对receiving记录,不保证所有失败目录自动自愈。生产启用与实际并发未知,暂保持P2。尚未实现。

    原设计提交0fd2fd67是此前方案;上述收紧意见优先,待用户确认后再修订设计和正式派卡。当前没有产品代码改动或部署。

  5. zj1123581321 commented on Oct 12, 2026

    @zj1123581321
    CollaboratorAuthor

    最小资源释放修复已进入草稿 PR: #236 。只调整现有 finally 控制流,不加资源框架、状态、重试或兜底。

    请求槽放在最外层释放;未移交的 inflight 不受错误写库或目录清理失败阻断;若目录确实仍在,保留对应预算,不能假报磁盘空间已回收。成功移交仍由 worker 管理媒体和账本。

    验收发现原卡要求的“真实 SQLite rowcount 不匹配导致 ValueError”覆盖尚缺,已回派补测试;同时删除文档中无证据的“所有失败目录 24 小时自愈”保证。待补齐后冻结最终提交做独立审查及完整 CI。暂不关 issue,维持 P2,不声称已部署或已在生产验证。

  6. zj1123581321 commented on Oct 12, 2026

    @zj1123581321
    CollaboratorAuthor

    已正常交付:PR #236 的最新头 d67e2beec719a2f732d6a56afc7c5a5adb815160 在完整 ready 门禁全通过、pr_merge_ready=READY 后按精确 head 合并,默认分支权威 SHA 为 1bc3b50e29296612c2d162582158b4abf71d3f43。

    已锁定的行为

    • 上传错误标记 writer 的真实故障仍以 HTTP 500 可见,不再短路请求槽与未移交 inflight 的释放。
    • 清理后文件仍在时保留 reservation,不虚报资源回收;该保守预算占用可能持续至重启,不承诺 24 小时自愈。
    • 成功发布到 worker 的媒体/inflight/预算仍由 worker 持有,handler 不夺权;消费起点采样在 pytest 主线程断言。
    • 配置为 1 时失败请求释放槽后能受理后继请求,不宣称默认上传已启用。没有新增 schema、配置、恢复框架、重试或错误协议。

    验收

    • 独立全量代码审查 PASS,0 findings;窄回归 43 项通过,两个实际 writer 故障、留盘预算、后继受理、成功移交与提前释放变异均保留真实边界证据。
    • 先合入的 A/D 与 B 仅出现 README 文本冲突,执行器普通提交只改 README 15 行,产品代码不手改;整合后的真实 Git 树为 778d211e040ee550ba8fd7499e72b7f1fd28eb30。
    • 在该实际合成树的私有依赖/无会话环境,完整 make test 退出 0,真实 Chromium 全链 17 passed(17.1s);没有重复旧产品 TDD/独审或伪造 pytest 数量。
    • 新头 CI run#38309271009:quality、primary、OCR、gate、ledger 全 success,Browser run#38309270036 success;未以监视器不可得作业务红绿结论,也未拼草稿 skip 凑绿。
    • 合并后本地主干、远端 main 及已验证树逐一匹配。此次未改 workflow,本仓仍无 push CI;新默认 SHA 的 event=push 查询为 0,明确记未配置/未执行,不以 PR 绿冒充主干执行。

    没有执行部署操作或生产探活,生产状态未探测。关闭上传 writer 故障短路资源释放问题。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working优先级:P2质量债、待拍板的产品决策、可选优化处置:待修已有明确修复边界,待确认设计或派发实现落点:本仓修复代码在本仓 git 跟踪路径内领域:本地上传媒体上传、资源生命周期与上传全链测试

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions