fix(worker): #1970 注册 AI 标签 Celery 任务(worker.tag_atom_clip unregistered) #1987

Merged
auto-approve-bot merged 1 commits from fix/1970-register-ai-tag-tasks into develop 2026-09-19 08:42:09 +08:00
Owner

背景

staging 上 worker.generate_atom_clips 正常执行并派发 worker.tag_atom_clip,但消费端报:

Received unregistered task of type 'worker.tag_atom_clip'

同时伴随 KeyError;Doubao 视觉 API 一次未被调用,所有 ai_tags 为 null。

根因

apps/worker/worker_app/celery_app.pycelery_app.conf.imports 只列了 worker_app.tasks.atom_clips,漏列:

  • worker_app.tasks.atom_clip_tagging(任务名 worker.tag_atom_clip
  • worker_app.tasks.backfill_atom_clip_tags(任务名 worker.backfill_atom_clip_tags

任务文件与装饰器均正确,但 worker 进程不会 import 这些模块,@task 装饰器从未执行。

修复

  • conf.imports 补两个模块(worker 启动时自动 import 注册)
  • 新增 tests/unit/test_1970_celery_ai_tag_registration.py:AST 静态断言 imports 配置 + 隔离子进程真实导入验证任务注册(用子进程规避 tests/unit 旧测试向 sys.modules 注入 celery_app MagicMock 不还原的污染问题)

验证

  • 目标测试通过;全量 tests/unit15821 passed, 28 skipped
  • ruff / black / isort 均通过
  • 本地隔离子进程验证两个任务名均成功注册

影响面

仅 worker 启动导入列表新增两模块,无业务逻辑改动。合入后部署 staging 即可验证 AI 标签 has_text 端到端落库。

## 背景 staging 上 `worker.generate_atom_clips` 正常执行并派发 `worker.tag_atom_clip`,但消费端报: ``` Received unregistered task of type 'worker.tag_atom_clip' ``` 同时伴随 KeyError;Doubao 视觉 API 一次未被调用,所有 `ai_tags` 为 null。 ## 根因 `apps/worker/worker_app/celery_app.py` 的 `celery_app.conf.imports` 只列了 `worker_app.tasks.atom_clips`,漏列: - `worker_app.tasks.atom_clip_tagging`(任务名 `worker.tag_atom_clip`) - `worker_app.tasks.backfill_atom_clip_tags`(任务名 `worker.backfill_atom_clip_tags`) 任务文件与装饰器均正确,但 worker 进程不会 import 这些模块,@task 装饰器从未执行。 ## 修复 - `conf.imports` 补两个模块(worker 启动时自动 import 注册) - 新增 `tests/unit/test_1970_celery_ai_tag_registration.py`:AST 静态断言 imports 配置 + 隔离子进程真实导入验证任务注册(用子进程规避 tests/unit 旧测试向 sys.modules 注入 celery_app MagicMock 不还原的污染问题) ## 验证 - 目标测试通过;全量 `tests/unit`:**15821 passed, 28 skipped** - ruff / black / isort 均通过 - 本地隔离子进程验证两个任务名均成功注册 ## 影响面 仅 worker 启动导入列表新增两模块,无业务逻辑改动。合入后部署 staging 即可验证 AI 标签 has_text 端到端落库。
xiaoxia added 1 commit 2026-09-19 08:36:23 +08:00
fix(worker): #1970 注册 AI 标签 Celery 任务,修复 worker.tag_atom_clip unregistered
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 1s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 1s
CI/CD Pipeline / Build Staging 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 / 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 / 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
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m24s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 2m2s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 2m44s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m3s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 2m58s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 3m3s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 4m45s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 4m49s
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 / PR Build Worker Image (pull_request) Successful in 5m3s
CI/CD Pipeline / CI Gate (pull_request) Successful in 1s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 2m43s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 30s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 30s
AI Code Review / AI Code Review (pull_request) Successful in 6m36s
7810ac4798
celery_app.conf.imports 漏列 atom_clip_tagging / backfill_atom_clip_tags,
worker 进程从未 import 任务模块,导致 staging 消费端报
'Received unregistered task of type worker.tag_atom_clip',
Doubao 视觉 API 未被调用、ai_tags 全为 null。

- conf.imports 补两个任务模块
- 新增注册回归测试(AST 静态断言 + 隔离子进程验证,
  规避旧测试 sys.modules 注入 MagicMock 不还原的污染)

🚀 预览环境已部署

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

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

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

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

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #1987 | | 预览链接 | [https://pr-1987.preview.xiaoxiajianji.com](https://pr-1987.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
auto-approve-bot merged commit 4d98e98b57 into develop 2026-09-19 08:42:09 +08:00
auto-approve-bot deleted branch fix/1970-register-ai-tag-tasks 2026-09-19 08:42:12 +08:00

🗑️ 预览环境已清理

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

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

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