Skip to content

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

@googs1025

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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions