fix(worker): P0 修复@celery_app.task装饰器错位导致所有生成任务崩溃 #1470

Merged
auto-approve-bot merged 3 commits from fix/p0-celery-task-decorator-misplacement into develop 2026-08-23 17:16:00 +08:00
Owner

P0 事故修复

PR #1468 重构时,@celery_app.task(name="worker.generate_video") 装饰器被误放在辅助函数 _sync_task_config_to_plan 上,导致:

  • Celery 任务 worker.generate_video 实际执行的是 _sync_task_config_to_plan
  • Celery 只传 task_id,函数签名需要 (source_edit_plan_id, task_info, db),立即抛 TypeError: missing 1 required positional argument: db
  • staging 上所有视频生成任务全部崩溃

修复

  1. 装饰器移到 generate_video 函数正上方
  2. _sync_task_config_to_plan 恢复为普通函数
  3. 同步补回配音临时文件清理(squash merge 时丢失)
  4. 3 个防回归单测:任务名、签名、辅助函数无装饰器

运行时验证

type: PromiseProxy
name: worker.generate_video
signature: (task_id: str) -> dict
OK

测试

3 passed,验证 Celery 任务绑定正确。

## P0 事故修复 PR #1468 重构时,@celery_app.task(name="worker.generate_video") 装饰器被误放在辅助函数 `_sync_task_config_to_plan` 上,导致: - Celery 任务 worker.generate_video 实际执行的是 _sync_task_config_to_plan - Celery 只传 task_id,函数签名需要 (source_edit_plan_id, task_info, db),立即抛 TypeError: missing 1 required positional argument: db - staging 上所有视频生成任务全部崩溃 ## 修复 1. 装饰器移到 generate_video 函数正上方 2. _sync_task_config_to_plan 恢复为普通函数 3. 同步补回配音临时文件清理(squash merge 时丢失) 4. 3 个防回归单测:任务名、签名、辅助函数无装饰器 ## 运行时验证 ``` type: PromiseProxy name: worker.generate_video signature: (task_id: str) -> dict OK ``` ## 测试 3 passed,验证 Celery 任务绑定正确。
xiaoxia added 1 commit 2026-08-23 16:58:47 +08:00
fix(worker): P0 修复@celery_app.task装饰器错位导致所有生成任务崩溃
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build 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 / Check if frontend-only change (pull_request) Successful in 32s
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 / PR Build API Image (pull_request) Successful in 52s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 50s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m31s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m34s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m43s
AI Code Review / AI Code Review (pull_request) Failing after 1m50s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m4s
CI/CD Pipeline / Validate - Code Quality (pull_request) Has been cancelled
CI/CD Pipeline / Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Has been cancelled
PR Automation / Auto Approve on CI Green (pull_request) Has been cancelled
cbb3176cb0
装饰器被误放在辅助函数 _sync_task_config_to_plan 上,导致
worker.generate_video 实际执行的是该辅助函数,Celery只传task_id
即抛 TypeError: missing db,staging 所有生成任务崩溃。

修复:
1. 将 @celery_app.task 移到真正的 generate_video 函数上方
2. _sync_task_config_to_plan 恢复为普通函数
3. 同步补回配音临时文件清理(squash合并时丢失)
4. 新增3个防回归单测,断言任务名/签名/辅助函数无装饰器

运行时验证:
- generate_video.name == worker.generate_video
- signature: (task_id: str) -> dict

🚀 预览环境已部署

项目 详情
PR号 #1470
预览链接 https://pr-1470.preview.xiaoxiajianji.com
API环境 staging

💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。

🔄 每次提交新代码后预览环境会自动更新。

🗑️ PR 关闭或合并后,预览环境会自动清理。

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #1470 | | 预览链接 | [https://pr-1470.preview.xiaoxiajianji.com](https://pr-1470.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
auto-approve-bot added 1 commit 2026-08-23 17:01:36 +08:00
style: auto-format with black + isort + prettier [skip ci-format-check]
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build 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 / Check if frontend-only change (pull_request) Successful in 38s
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 / PR Build API Image (pull_request) Successful in 46s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 45s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m46s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m50s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m53s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m12s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 2m44s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m43s
CI/CD Pipeline / Validate - Code Quality (pull_request) Has been cancelled
CI/CD Pipeline / Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Has been cancelled
AI Code Review / AI Code Review (pull_request) Has been cancelled
19d58e1d93
xiaoxia added 1 commit 2026-08-23 17:05:39 +08:00
fix(worker): try/finally包裹新路径确保配音临时文件清理
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build 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 / Check if frontend-only change (pull_request) Successful in 43s
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 / Validate - Type Check (mypy) (pull_request) Successful in 1m27s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 40s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 46s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m42s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m45s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m19s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 2m38s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m31s
AI Code Review / AI Code Review (pull_request) Successful in 3m49s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 5m54s
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 / Integration Tests (pull_request) Successful in 1m43s
CI/CD Pipeline / CI Gate (pull_request) Successful in 7s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 43s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 56s
7085562a4f
AI Review反馈:
1. voiceover清理在正常返回路径,渲染后异常会泄漏→用try/finally包裹整个新路径主体
2. 测试注释明确Celery bind=True的run()签名不含self(已实测确认)
Collaborator

【阻塞级判定】

  • 是否存在阻塞级问题:否
  • 阻塞级问题数量:0 个

📊 审查概览

  • 整体评价:通过
  • 建议级问题数量:0 个

🔴 阻塞级问题(必须修复)

💡 改进建议(不阻塞合并)

良好实践

  1. 修复了严重的装饰器误用 Bug: 将 @celery_app.task 装饰器从辅助函数 _sync_task_config_to_plan 正确移动到了目标函数 generate_video 上。这修复了导致 Worker 无法正确处理任务、引发 TypeError 的 P0 级事故隐患。
  2. 完善了资源清理机制: 在 generate_video 函数中新增了 try...finally 块,确保临时配音文件 voiceover_tmp_path 无论任务结果如何都会被删除。这有效防止了因任务异常或中断导致的临时文件残留和磁盘空间泄漏。
  3. 增加了针对性的回归测试: 新增的测试用例 test_worker_generate_video_task_binding.py 非常有价值,通过检查函数签名和注册名称,从测试层面杜绝了装饰器错位的回归风险。

🤖 由 AI 代码审查机器人自动生成 | 2026-08-23 09:09:29 | 模型:

### 【阻塞级判定】 - 是否存在阻塞级问题:否 - 阻塞级问题数量:0 个 ### 📊 审查概览 - 整体评价:通过 - 建议级问题数量:0 个 ### 🔴 阻塞级问题(必须修复) 无 ### 💡 改进建议(不阻塞合并) 无 ### ✅ 良好实践 1. **修复了严重的装饰器误用 Bug**: 将 `@celery_app.task` 装饰器从辅助函数 `_sync_task_config_to_plan` 正确移动到了目标函数 `generate_video` 上。这修复了导致 Worker 无法正确处理任务、引发 `TypeError` 的 P0 级事故隐患。 2. **完善了资源清理机制**: 在 `generate_video` 函数中新增了 `try...finally` 块,确保临时配音文件 `voiceover_tmp_path` 无论任务结果如何都会被删除。这有效防止了因任务异常或中断导致的临时文件残留和磁盘空间泄漏。 3. **增加了针对性的回归测试**: 新增的测试用例 `test_worker_generate_video_task_binding.py` 非常有价值,通过检查函数签名和注册名称,从测试层面杜绝了装饰器错位的回归风险。 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-08-23 09:09:29 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
auto-approve-bot approved these changes 2026-08-23 17:15:30 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot approved these changes 2026-08-23 17:15:30 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot merged commit 42744241c4 into develop 2026-08-23 17:16:00 +08:00
auto-approve-bot deleted branch fix/p0-celery-task-decorator-misplacement 2026-08-23 17:16:01 +08:00

🗑️ 预览环境已清理

PR #1470 已关闭或合并,对应的预览环境已被清理。

如有需要,可以重新打开 PR 来重新生成预览环境。

🗑️ **预览环境已清理** PR #1470 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Sign in to join this conversation.