Skip to content

🐛 [P1] background-extractor carriedBatches 连败丢暂存批 + skip 路径吞批——PR#445 引入 #450

Description

@CavinHuang

背景

PR #445(编排记忆批,已合入 main @ fb6dddc)将提取丢轮的单槽重放升级为 FIFO pending[] + 失败暂存 carriedBatches,但暂存机制自身引入连败丢批缺陷,恰复刻了本要消灭的"静默丢轮"。

问题

apps/sidecar/src/services/memory-v2/background-extractor.ts:

  • :139-140 runExtraction 开头 carriedBatches.delete(threadKey)
  • catch(:246)重建暂存时 get() 已空 → 只放回 [input.items]

两轮连续失败(provider 短暂故障跨两轮)即永久丢失更早的暂存批。

附带(F4):skip 路径吞批

:155-157 hasMemoryMutationForRun 命中即写 skipped 且 cursor 前进,已并入的 carried 批证据被消费但从未提取。

附带(F5):无界且不可恢复

carriedBatches 内存 Map 无清理(线程废弃后泄漏);重启后仅 interrupted 任务可恢复(:97-109 只查 interrupted),failed 暂存批丢失。

建议修法

  • catch 改为 [...carriedBatches.get(key) ?? [], ...carried局部变量, input.items](函数局部 carried 变量现成可用);或把 delete 挪到成功路径(completedCursor 推进之后)
  • skip 分支:已并入的 carried 批应退回暂存而非随 cursor 丢弃
  • 给 carriedBatches 加注释声明生命周期或 TTL;恢复查询放宽到 failed

关联

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions