fix(P1): 成片库历史数据user_id回填 #572

Merged
auto-approve-bot merged 1 commits from fix/p1-video-library-backfill-user-id into develop 2026-07-19 12:01:18 +08:00
Owner

问题

#563 成片库按用户维度改造上线后,历史数据查不到。原因:migration只加了user_id列但没回填,老记录user_id是空字符串,按真实用户UUID过滤匹配不到。

修复

  • 新建alembic migration 045(不修改已合入的044)
  • 通过 generation_task_id 关联 generation_tasks 表,取 created_by_user_id 回填
  • 回填不到的兜底记录保持空字符串

兜底记录评估

所有正常生成路径(一键生成、剪辑计划、去重入库)都通过 create_video_record_and_dedup 创建记录,都有 generation_task_id。
回填不到的情况仅可能是早期手工测试数据或异常链路产生,数量极少。
如果staging上仍有查不到的情况,可进一步排查具体记录。

## 问题 #563 成片库按用户维度改造上线后,历史数据查不到。原因:migration只加了user_id列但没回填,老记录user_id是空字符串,按真实用户UUID过滤匹配不到。 ## 修复 - 新建alembic migration 045(不修改已合入的044) - 通过 generation_task_id 关联 generation_tasks 表,取 created_by_user_id 回填 - 回填不到的兜底记录保持空字符串 ## 兜底记录评估 所有正常生成路径(一键生成、剪辑计划、去重入库)都通过 create_video_record_and_dedup 创建记录,都有 generation_task_id。 回填不到的情况仅可能是早期手工测试数据或异常链路产生,数量极少。 如果staging上仍有查不到的情况,可进一步排查具体记录。
xiaoxia reviewed 2026-07-19 11:04:20 +08:00
xiaoxia left a comment
Author
Owner

LGTM

LGTM
xiaoxia force-pushed fix/p1-video-library-backfill-user-id from 2565cc5a2f to e3f9fc5984 2026-07-19 11:17:25 +08:00 Compare
xiaoxia force-pushed fix/p1-video-library-backfill-user-id from e3f9fc5984 to 38bddb2a76 2026-07-19 11:29:28 +08:00 Compare
auto-approve-bot approved these changes 2026-07-19 11:32:55 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

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

CI全绿,自动审批通过。

CI全绿,自动审批通过。
xiaoxia added 1 commit 2026-07-19 11:54:26 +08:00
fix(migration): black格式化
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 / 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 / Deploy Staging (Watchtower auto-deploy) (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 28s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m32s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 1m38s
AI Code Review / AI Code Review (pull_request) Successful in 2m4s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Successful in 3m7s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 3m52s
Auto Approve CI PRs / Auto Approve on CI Green (pull_request) Successful in 5m33s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 2m8s
Auto Merge CI PRs / Auto Merge on CI Green + Approved (pull_request) Successful in 6m52s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 24s
b6819a9e3e
xiaoxia force-pushed fix/p1-video-library-backfill-user-id from 38bddb2a76 to b6819a9e3e 2026-07-19 11:54:26 +08:00 Compare

🚀 预览环境已部署

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

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

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

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

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #572 | | 预览链接 | [https://pr-572.preview.xiaoxiajianji.com](https://pr-572.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
Collaborator

📊 审查概览

  • 整体评价:需修改
  • 严重问题数量:1 个
  • 一般建议数量:1 个

需修改的问题(严重)

  1. [alembic/versions/045_backfill_user_id.py: 28] 大表更新导致长时间锁表风险
    • 问题描述:代码直接执行 UPDATE ... FROM ... SQL 语句。如果 generated_videos 表数据量较大(例如超过 10 万行),此操作会长时间持有数据库写锁,阻塞线上业务对该表的读写请求,严重时可导致服务不可用或数据库连接池耗尽。
    • 修改建议:严禁在生产环境对大表进行无分批的全量更新。建议改为分批处理逻辑,例如在 Python 中循环执行带有 LIMIT 的 UPDATE 语句(每次处理 1000-5000 行),并在批次之间短暂休眠,以减小事务锁粒度。

💡 改进建议(一般)

  1. [alembic/versions/045_backfill_user_id.py: 35] 降级函数不可逆风险
    • 具体内容:downgrade 函数直接 pass,意味着该迁移无法回滚。虽然数据回填确实难以精确区分哪些是回填的数据,但留空会让迁移工具误以为回滚成功。建议抛出 NotImplementedError 或在文档头部显著标记此迁移为“不可逆”,防止运维人员误操作回滚导致数据状态不一致。

良好实践

  • SQL 逻辑严谨,使用了 WHERE gv.user_id = '' 确保幂等性,避免重复更新已有数据。
  • 使用了 AND gt.created_by_user_id != '' 作为防御性编程,防止将空值错误地回填进去。

🤖 由 AI 代码审查机器人自动生成 | 2026-07-19 11:56:30 | 模型:

### 📊 审查概览 - 整体评价:需修改 - 严重问题数量:1 个 - 一般建议数量:1 个 ### ❌ 需修改的问题(严重) 1. **[alembic/versions/045_backfill_user_id.py: 28] 大表更新导致长时间锁表风险** - 问题描述:代码直接执行 `UPDATE ... FROM ...` SQL 语句。如果 `generated_videos` 表数据量较大(例如超过 10 万行),此操作会长时间持有数据库写锁,阻塞线上业务对该表的读写请求,严重时可导致服务不可用或数据库连接池耗尽。 - 修改建议:严禁在生产环境对大表进行无分批的全量更新。建议改为分批处理逻辑,例如在 Python 中循环执行带有 `LIMIT` 的 UPDATE 语句(每次处理 1000-5000 行),并在批次之间短暂休眠,以减小事务锁粒度。 ### 💡 改进建议(一般) 1. **[alembic/versions/045_backfill_user_id.py: 35] 降级函数不可逆风险** - 具体内容:`downgrade` 函数直接 `pass`,意味着该迁移无法回滚。虽然数据回填确实难以精确区分哪些是回填的数据,但留空会让迁移工具误以为回滚成功。建议抛出 `NotImplementedError` 或在文档头部显著标记此迁移为“不可逆”,防止运维人员误操作回滚导致数据状态不一致。 ### ✅ 良好实践 - SQL 逻辑严谨,使用了 `WHERE gv.user_id = ''` 确保幂等性,避免重复更新已有数据。 - 使用了 `AND gt.created_by_user_id != ''` 作为防御性编程,防止将空值错误地回填进去。 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-19 11:56:30 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
auto-approve-bot merged commit c080a688bb into develop 2026-07-19 12:01:18 +08:00
auto-approve-bot deleted branch fix/p1-video-library-backfill-user-id 2026-07-19 12:01:18 +08:00

🗑️ 预览环境已清理

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

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

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