fix(upload): complete 接口幂等去重 + HEVC 转码回写占位 asset 禁止兜底新建 (#1714) #1715
Merged
auto-approve-bot
merged 1 commits from 2026-09-05 16:07:45 +08:00
feature/upload-complete-idempotency-hevc-orphan-1714 into develop
1 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
31cef633ee |
fix(upload): complete接口幂等去重 + HEVC转码回写占位asset禁止兜底新建 (#1714)
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 2s
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 2s
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 31s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 32s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m30s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 1m36s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m51s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 2m16s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m56s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 5m18s
AI Code Review / AI Code Review (pull_request) Successful in 6m15s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 6m36s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Successful in 1s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 4m18s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 7s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 23s
P0 complete 幂等: - complete/上传去重三级:client_upload_id(客户端幂等token) → file_hash → 同库同名近期(30min)活动占位兜底;旧客户端不传hash/token时,complete 超时重试不再重复建 PROCESSING 记录和 ingest job - 幂等检查前置到 OSS file_exists 之前:重复 complete 即使 OSS 对象已不存在 也返回已存在记录(duplicated=true),不404、不重复建库 - multipart 上传同 token 重复提交直接返回,不再传 OSS - 新仓储方法全部 getattr 鸭子类型,旧仓储/mock 零破坏 P1 HEVC 转码孤儿: - ingest job 透传 complete 阶段创建的占位 asset_id;worker 关联优先级 job.asset_id → 原始 storage_key → 当前 key(旧 key),不再用转码后的 *_h264 新 key 回查占位(旧逻辑查不到兜底新建 READY,原占位永久 processing) - 命中占位则原地更新 READY,storage_key 同步改写为 *_h264(播放走转码产物), 原始 key 记入 metadata(original_storage_key/hevc_transcoded) - 无效媒体/ingest 异常路径同样回写占位为 ERROR,不再新建第二条 - 异常路径从 _h264 key 还原原始 key 多路径查找 - job_repo.update 同步 storage_key(转码改写后 DB 一致) 迁移:alembic 066(assets.client_upload_id + ingest_jobs.asset_id,含索引) 测试:新增 14 个单测(重复 complete 幂等只建一条/不重复派 job、token/hash/ 兜底/窗口/旧仓储降级/OSS缺失、转码占位回写不产生重复 READY、asset_id 关联、 无占位兜底兼容、非HEVC、无效媒体/异常占位标 ERROR);全量 14281 passed |