fix(ci): 集成测试xdist worker按内存动态计算,防止OOM #744

Closed
xiaoxia wants to merge 2 commits from fix/ci-integration-oom-workers into develop
Owner

包含两个CI修复:

  1. Unit Tests: 修复test_verify_token_tampered_signature偶发失败(原测试只改签名最后一个字符,在某些token下篡改无效)
  2. Integration Tests: xdist worker数按内存动态计算防止OOM,maxfail调到3
包含两个CI修复: 1. Unit Tests: 修复test_verify_token_tampered_signature偶发失败(原测试只改签名最后一个字符,在某些token下篡改无效) 2. Integration Tests: xdist worker数按内存动态计算防止OOM,maxfail调到3
xiaoxia added 1 commit 2026-07-22 21:16:37 +08:00
fix(ci): 集成测试xdist worker数按内存动态计算,防止OOM
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 / Validate - Type Check (mypy) (pull_request) Successful in 40s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 46s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 45s
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 / PR Build Web Image (pull_request) Successful in 1m6s
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 / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 1m16s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 49s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 2m3s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 3m15s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m29s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 3m55s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 5m8s
CI/CD Pipeline / PR Build API Image (pull_request) Has been cancelled
CI/CD Pipeline / PR Build Worker Image (pull_request) Has been cancelled
AI Code Review / AI Code Review (pull_request) Has been cancelled
8ea3263a12
之前 -n auto 用满所有CPU核,CI runner内存不足导致worker crash
和ffmpeg子进程被SIGKILL。改为根据可用内存动态计算worker数,
预留1GB给系统和ffmpeg等子进程,限制2-8个worker。
同时 maxfail 从1调到3,容忍偶发不稳定。

🚀 预览环境已部署

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

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

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

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

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #744 | | 预览链接 | [https://pr-744.preview.xiaoxiajianji.com](https://pr-744.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
xiaoxia added 1 commit 2026-07-22 21:23:04 +08:00
fix(test): 修复test_verify_token_tampered_signature偶发失败
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 30s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 38s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 41s
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 / Validate - Migration (alembic) (pull_request) Successful in 19s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 44s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 1m44s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 1m7s
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
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 42s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (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 / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m42s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 2m48s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 4m37s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 6m10s
AI Code Review / AI Code Review (pull_request) Successful in 5m39s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 12m16s
Preview Cleanup / Cleanup Preview Environment (pull_request) Failing after 15m38s
0fccfcd181
原测试仅篡改token最后一个字符,在某些PyJWT/环境下可能因
base64填充位或签名末尾字节对齐问题导致验证仍通过。
改为篡改payload内容(修改sub字段),确保签名必然不匹配。
auto-approve-bot approved these changes 2026-07-22 21:24:59 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

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

CI全绿,自动审批通过。

CI全绿,自动审批通过。
Collaborator

代码审查结果 - PR #744

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

  1. scripts/ci/run_integration_tests.sh 第263行:内存计算逻辑存在边界缺陷,可能导致强制开启过多进程引发 OOM。
    • 当可用内存略大于预留值(如 1200MB)时,计算出的 MAX_WORKERS 为 0 或 1,随后被强制修正为 2。此时实际所需内存(2 workers * 256MB + 1024MB Reserved = 1536MB)将超过可用内存(1200MB),违背了“防止 OOM”的代码注释初衷。
    • 建议在强制修正最小值前,增加判断:仅当 AVAIL_MEM_MB 足够支撑最小配置(2 workers + reserved)时才修正为 2,否则应设为 1 或 0(串行运行)。

💡 建议(2个可选)

  1. scripts/ci/run_integration_tests.sh 第271行maxfail=3 的设置可能掩盖测试中的真实失败。
    • 虽然目的是容忍偶发 OOM,但在 CI 环境中通常建议快速失败(maxfail=1)。如果测试不稳定,建议优先排查根因而非提高阈值。
  2. tests/unit/test_auth_service.py 第459行:代码风格建议。
    • 建议将函数内部的 import base64import json 移至文件顶部,遵循 PEP8 规范。

格式检查通过 | 逻辑审查需修改 | 性能无隐患


🤖 由 AI 代码审查机器人自动生成 | 2026-07-22 21:29:30 | 模型:

## 代码审查结果 - PR #744 ### ⚠️ 问题(1个需要修改) 1. **scripts/ci/run_integration_tests.sh 第263行**:内存计算逻辑存在边界缺陷,可能导致强制开启过多进程引发 OOM。 - 当可用内存略大于预留值(如 1200MB)时,计算出的 `MAX_WORKERS` 为 0 或 1,随后被强制修正为 2。此时实际所需内存(2 workers * 256MB + 1024MB Reserved = 1536MB)将超过可用内存(1200MB),违背了“防止 OOM”的代码注释初衷。 - 建议在强制修正最小值前,增加判断:仅当 `AVAIL_MEM_MB` 足够支撑最小配置(2 workers + reserved)时才修正为 2,否则应设为 1 或 0(串行运行)。 ### 💡 建议(2个可选) 1. **scripts/ci/run_integration_tests.sh 第271行**:`maxfail=3` 的设置可能掩盖测试中的真实失败。 - 虽然目的是容忍偶发 OOM,但在 CI 环境中通常建议快速失败(maxfail=1)。如果测试不稳定,建议优先排查根因而非提高阈值。 2. **tests/unit/test_auth_service.py 第459行**:代码风格建议。 - 建议将函数内部的 `import base64` 和 `import json` 移至文件顶部,遵循 PEP8 规范。 --- ✅ 格式检查通过 | ❌ 逻辑审查需修改 | ✅ 性能无隐患 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-22 21:29:30 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
xiaoxia closed this pull request 2026-07-22 22:32:12 +08:00
Some checks are pending
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 30s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 38s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 41s
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 / Validate - Migration (alembic) (pull_request) Successful in 19s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 44s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 1m44s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 1m7s
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
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 42s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (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 / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m42s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 2m48s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 4m37s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 6m10s
AI Code Review / AI Code Review (pull_request) Successful in 5m39s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 12m16s
Preview Cleanup / Cleanup Preview Environment (pull_request) Failing after 15m38s

Pull request closed

Sign in to join this conversation.