Skip to content

fix(worker): 独立 worker 启动加载 DB 设置——修复拆分部署下事件丢失与身份注入消失 - #512

Merged
Yanyutin753 merged 2 commits into
developfrom
fix/worker-settings-init
Sep 8, 2026
Merged

fix(worker): 独立 worker 启动加载 DB 设置——修复拆分部署下事件丢失与身份注入消失#512
Yanyutin753 merged 2 commits into
developfrom
fix/worker-settings-init

Conversation

@Yanyutin753

Copy link
Copy Markdown
Owner

Summary

独立 worker 进程(#507 拆分部署)此前不加载 DB 设置,只跑 pydantic 默认值,与 API 的生效设置(DB > env > 默认)分叉——2026-09-09 生产 P0 的根因。

事故链(生产 18:30Z 起全部会话受影响)

  1. 生产 DB 开了 SESSION_EVENT_CHUNK_STORAGE_ENABLED=true:API 写 chunk 存储
  2. worker(默认值 false)把流式事件走 legacy 内联 $push
  3. merge 以「chunk 优先」视图读回,把仅含 2 条事件的视图覆写掉内联数组里的全部流式事件
  4. 结果:event_count=2(user:message + 零值 token:usage),刷新即丢整段历史;同一根因还导致 SANDBOX_PLATFORM 回落默认 → 本地 daemon 身份段(fix(prompt): 本地 daemon 会话注入「沙箱=用户本机」身份段 #499)不再注入

staging 此前测不出的原因:staging DB 没开 chunk 开关(两边都 false,路径一致)。开启后 5 分钟内稳定复现(event_count=2)。

Fix

worker_main._amain 启动第一步 initialize_settings() + validate_distributed_runtime_settings(settings),对齐 API lifespan(src/api/main.py:443);失败快速退出,由 k8s CrashLoopBackOff 显性暴露——绝不带默认值继续吞事件。

Testing

  • TDD:test_amain_loads_db_settings_before_any_service(顺序契约)、test_amain_settings_init_failure_stops_startup(失败即停)——修复前 RED、修复后 GREEN
  • tests/infra/task/ + tests/infra/session/ + tests/kernel/config/ + tests/client/ 共 920 passed
  • ruff check / format、mypy 全绿
  • staging 拆分 + chunk=on 复现验证(合并后滚动验证,见后续评论)

worker_main 此前只跑 pydantic 默认值,与 API 的 DB 生效设置分叉。生产
SESSION_EVENT_CHUNK_STORAGE_ENABLED=true 时:API 写 chunk、worker 走 legacy
内联,事件被 chunk 视图的 merge 覆写蒸发——刷新即丢整段对话历史
(2026-09-09 生产 P0,18:30Z 起全部会话 event_count=2);SANDBOX_PLATFORM
同理回落默认,本地 daemon 身份段(#499)不再注入;token 统计同步失真。

修复:_amain 启动先 initialize_settings()(DB > env > 默认,对齐 API
lifespan)再 validate_distributed_runtime_settings,失败快速退出由
CrashLoopBackOff 显性暴露,绝不带默认值吞事件。staging 复现验证:
chunk=on + worker 拆分下事件完整落库(复现样本 event_count=2 → 修复后全量)。
@Yanyutin753
Yanyutin753 merged commit 262662e into develop Sep 8, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant