fix(P0): 修复一键生成视频成片库不显示 - project_id为空时跳过写表 #541

Merged
auto-approve-bot merged 1 commits from fix/p0-generated-videos-not-created into develop 2026-07-18 23:01:36 +08:00
Owner

问题

一键生成的视频,渲染成功(100% completed)但成片库看不到。

根因

edit_plan_generation.py_finalize_render_success 中:

if generation_task_id and project_id:
    create_video_record_and_dedup(...)

一键生成场景下 edit_plan.project_id 为空串,导致判断不通过,跳过了写 generated_videos 表。
任务本身状态是 completed、progress=100%、result_count=1,所以任务列表看是完成的,只是成片库没记录。

修复

  1. 放宽写表条件:只要有 generation_task_id 就写入,project_id 有空就填没有就空串
  2. 历史数据补写脚本scripts/backfill_generated_videos.py,扫描已completed但无generated_videos记录的任务,从plan.config.rendered_url补写
  3. 5个单元测试:验证空project_id场景、有project_id场景、无generation_task_id场景

验证

  • 5个单元测试全绿
  • black / isort / ruff 全部通过
## 问题 一键生成的视频,渲染成功(100% completed)但成片库看不到。 ## 根因 `edit_plan_generation.py` 的 `_finalize_render_success` 中: ```python if generation_task_id and project_id: create_video_record_and_dedup(...) ``` 一键生成场景下 `edit_plan.project_id` 为空串,导致判断不通过,跳过了写 `generated_videos` 表。 任务本身状态是 completed、progress=100%、result_count=1,所以任务列表看是完成的,只是成片库没记录。 ## 修复 1. **放宽写表条件**:只要有 `generation_task_id` 就写入,`project_id` 有空就填没有就空串 2. **历史数据补写脚本**:`scripts/backfill_generated_videos.py`,扫描已completed但无generated_videos记录的任务,从plan.config.rendered_url补写 3. **5个单元测试**:验证空project_id场景、有project_id场景、无generation_task_id场景 ## 验证 - 5个单元测试全绿 - black / isort / ruff 全部通过
xiaoxia added the bugbackendP0 labels 2026-07-18 21:31:25 +08:00
xiaoxia added 1 commit 2026-07-18 22:55:16 +08:00
fix(P0): 修复一键生成视频成片库不显示 - project_id为空时跳过写表
CI Build & Deploy Pipeline / Build Staging API Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production API Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production Web Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI Build & Deploy Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI Build & Deploy Pipeline / Deploy Production (pull_request) Has been skipped
CI Build & Deploy Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 24s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Unit Tests (pull_request) Successful in 1m26s
AI Code Review / AI Code Review (pull_request) Successful in 2m1s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 2m8s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m9s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Successful in 3m15s
Auto Approve CI PRs / Auto Approve on CI Green (pull_request) Successful in 3m43s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m35s
Auto Merge CI PRs / Auto Merge on CI Green + Approved (pull_request) Successful in 6m19s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 24s
a936b88b0f
- 放宽_finalize_render_success写表条件:只要有generation_task_id就写,不依赖project_id
- 新增历史数据补写脚本scripts/backfill_generated_videos.py
- 新增5个单元测试验证逻辑
- 一键生成场景(project_id为空)的视频渲染成功后会正确写入generated_videos表
xiaoxia force-pushed fix/p0-generated-videos-not-created from cac603fac2 to a936b88b0f 2026-07-18 22:55:16 +08:00 Compare
Collaborator

代码审查结果 - PR #541

⚠️ 问题(1个需要修改)

  1. scripts/backfill_generated_videos.py 第54-67行:存在严重的性能隐患,可能导致内存溢出(OOM)或数据库连接耗尽。
    • 说明:代码使用 .all() 一次性将所有 status=completed 的任务加载到内存中。如果历史任务数量庞大(如数十万条),会导致 Worker 进程内存溢出崩溃。此外,在循环内部(第67行和第79行)对每个任务执行额外的数据库查询(检查是否存在、查询 EditPlan),构成了典型的 N+1 查询问题,极慢且会对 DB 造成巨大压力。
    • 后果:在生产环境运行此脚本时极易导致服务崩溃或严重阻塞数据库。

💡 建议(1个可选)

  1. scripts/backfill_generated_videos.py:建议使用分页或流式处理(yield_per)重构脚本逻辑。
    • 说明:应避免一次性加载全量数据。可以使用 session.query(...).yield_per(500) 进行流式迭代,或者使用 ID 范围分页处理。同时,建议将循环内的查询改为批量查询(例如先获取所有相关的 source_edit_plan_id,再一次性 in_ 查询 EditPlanModel),以减少数据库交互次数。

格式检查通过 | 逻辑审查需修改 | ⚠️ 建议关注性能


🤖 由 AI 代码审查机器人自动生成 | 2026-07-18 22:57:17 | 模型:

## 代码审查结果 - PR #541 ### ⚠️ 问题(1个需要修改) 1. **scripts/backfill_generated_videos.py 第54-67行**:存在严重的性能隐患,可能导致内存溢出(OOM)或数据库连接耗尽。 - **说明**:代码使用 `.all()` 一次性将所有 `status=completed` 的任务加载到内存中。如果历史任务数量庞大(如数十万条),会导致 Worker 进程内存溢出崩溃。此外,在循环内部(第67行和第79行)对每个任务执行额外的数据库查询(检查是否存在、查询 EditPlan),构成了典型的 N+1 查询问题,极慢且会对 DB 造成巨大压力。 - **后果**:在生产环境运行此脚本时极易导致服务崩溃或严重阻塞数据库。 ### 💡 建议(1个可选) 1. **scripts/backfill_generated_videos.py**:建议使用分页或流式处理(`yield_per`)重构脚本逻辑。 - **说明**:应避免一次性加载全量数据。可以使用 `session.query(...).yield_per(500)` 进行流式迭代,或者使用 ID 范围分页处理。同时,建议将循环内的查询改为批量查询(例如先获取所有相关的 `source_edit_plan_id`,再一次性 `in_` 查询 `EditPlanModel`),以减少数据库交互次数。 --- ✅ 格式检查通过 | ❌ 逻辑审查需修改 | ⚠️ 建议关注性能 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-18 22:57:17 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->

🚀 预览环境已部署

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

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

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

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

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #541 | | 预览链接 | [https://pr-541.preview.xiaoxiajianji.com](https://pr-541.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
auto-approve-bot approved these changes 2026-07-18 22:59:00 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot approved these changes 2026-07-18 22:59:00 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot merged commit 62a974a836 into develop 2026-07-18 23:01:36 +08:00
auto-approve-bot deleted branch fix/p0-generated-videos-not-created 2026-07-18 23:01:36 +08:00

🗑️ 预览环境已清理

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

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

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