Skip to content

同機多個 ltm mcp 行程(bg-spare 預熱 session)各自在首查時併入語料、爭同一把 build lock(sister concern from #64) #65

Description

@kiki830621

Problem

2026-09-03 實測:本機同時有 14 個 /Users/che/bin/ltm mcp 行程,全部掛在 Claude Code 的 claude bg-spare 預熱 session 之下(ps -axo pid,ppid,command 對照 parent),存活 2 分鐘到 19 小時不等,其中 7 個仍是 v0.3.0 的舊映像(binary 換 inode 後舊行程照跑)。

每個行程在第一次 ltm_query 時都會跑 refreshIncrementally()Sources/LTMService/LTMService.swift:819,無條件)。語料一有大量新檔(本日 174 MB/11,935 chunk),第一個拿到 build lock 的行程花 2 分 32 秒併入;其餘行程的首查若在同一窗口,會排隊等鎖(#53 決定鎖全程持有)。同一份工作只會被做一次(後到者拿到鎖時語料已是新的),但等待本身會讓那些 session 的第一次 MCP 呼叫卡住數分鐘,而 MCP client 端看到的只是沒有回應。

更正(2026-09-07 diagnose):建置鎖是 flock(LOCK_EX | LOCK_NB),拿不到鎖的行程不等,立即用既有索引作答並附警告(fixture 實測 0.10 s)。「排隊等鎖數分鐘」不會發生;剩下的問題是 MCP 路徑首查的併入無界(見 Diagnosis)。

Type

bug(多行程情境下的延遲放大;不涉及正確性——鎖語意是對的)

Expected

  1. 先量:同時 N 個 ltm mcp 首查時,第 2..N 個的等待分佈(可用 fixture 語料+人為 backlog 重現,不對真實索引做實驗)。
  2. 決定是否需要:(a) 查詢前併入加有界等待(拿不到鎖就用既有索引作答並在回應附「索引落後」警告——MCP 回應仍缺 sourcesUnreadable 與 skipped——與 CLI 的 refresh 診斷只對齊了一半 #54 已有警告通道);(b) 或 主動回想(proactive recall):要不要用 hook 讓 ltm 自動提醒或自動查詢——設計決定 #64 討論中的 --no-refresh--max-refresh-seconds 同時服務這裡。
  3. 不變式 2 不動:任何「用舊索引作答」都要在回應裡說明,不得靜默。

Actual

所有行程無條件併入、無界等鎖;多 session 機器上第一次呼叫的延遲取決於別的 session 有沒有先付過那筆成本。

相關

Source: surfaced during /idd-diagnose #64 sister concern surfacing (Step 3.6)


Current Status

  • Phase: diagnosed
  • Updated: 2026-09-07(diagnosis 已 post;前提更正;Complexity Plan;Conflict Class A)
  • Dashboard: (見 dashboard comment)

Tasks

  • 1. ltm_query MCP 加 max_refresh_seconds(0=不限),預設有界;回應附落後行
  • 2. lockHeld 警告維持,tool description 說明兩種警告
  • 3. ltm-cli spec lock-frequency 段補 MCP 預設一句
  • 4. MCP 測試:bounded/0 無界/並行 deferred
  • 5. docs/measurements/2026-09-xx-mcp-first-merge.md
  • 6. CHANGELOG

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions