Skip to content

[Bug]: session 状态生命周期相关:无淘汰 / preserve 永不清 / stream finally 整桶清 #5

Description

@googs1025

最近在用 OpenClaw Hermes 接 function_router 时观察了一下 session 状态的管理,发现单机单用户场景下有几个实际会遇到的问题,都集中在 _QWEN_SAVED_CONTEXTS_QWEN_PENDING_UPSTREAM_TURNS 这两个 module-level dict 的生命周期上。

问题

1. session 状态无 TTL / 淘汰机制

这两个 dict 一旦写入就不会主动清理。OpenClaw 每个 chat 会换新 session_key,旧 key 的 context 永远留在内存里。长时间挂着服务,内存只增不减,需要重启才能回收。

_QWEN_SAVED_CONTEXTS: dict[str, list[dict[str, Any]]] = {}
_QWEN_PENDING_UPSTREAM_TURNS: dict[str, list[dict[str, str]]] = {}

2. fr_context_preserve=true 显式永不清理

这个配置开启后开了之后也会出现 OOM3. stream finally 按整桶清不按 index

proxy_upstream  stream  finally 里直接 del _QWEN_PENDING_UPSTREAM_TURNS[key] 清掉整个 bucket绝大多数时候没问题但有一种场景会丢数据- 用户中断第一个流式输出立刻发第二个请求
- 第二个请求已经往同一 session  bucket 里写了新 turn
- 第一个 stream  finally 才执行把第二个还没消费的 turn 一起抹掉

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions