Skip to content

fix(issue #2528): index active RuntimeContext by runId for concurrent multi-session support - #2531

Open
xzxiaoshan wants to merge 5 commits into
agentscope-ai:mainfrom
xzxiaoshan:feat/runtime-context-runid-and-active-rc-concurrent
Open

fix(issue #2528): index active RuntimeContext by runId for concurrent multi-session support#2531
xzxiaoshan wants to merge 5 commits into
agentscope-ai:mainfrom
xzxiaoshan:feat/runtime-context-runid-and-active-rc-concurrent

Conversation

@xzxiaoshan

@xzxiaoshan xzxiaoshan commented Aug 2, 2026

Copy link
Copy Markdown

问题

ReActAgent.activeRc 是一个 private volatile RuntimeContext 单字段。当同一 agent 实例上多个不同 (userId, sessionId) 会话并发调用时,后启动的调用会覆写前一个的 RuntimeContext,导致:

  • 跨会话上下文泄漏(用户 A 的工具读到用户 B 的 session/tenant)
  • getRuntimeContext() 在并发下返回错误会话或 null
  • 偶发性状态丢失,难以复现

ISSUE:#2528

方案

1. RuntimeContext 新增强制 runId

为 RuntimeContext 新增 runId 字段,在 Builder.build() 中未显式设置时自动生成 UUID。getRunId() 始终非空,作为 per-call 的权威 correlation id。

2. activeRc 升级为 runId 索引的 ConcurrentHashMap

ReActAgent.activeRc(单 volatile 字段)替换为 AgentBase.activeContextsConcurrentHashMap<String, RuntimeContext>),按 runId 索引:

  • 注册runLifecycleMono.deferContextual 中,调用 activeContexts.put(context.getRunId(), context)
  • 清理releaseExecutionMono.using cleanup)中调用 activeContexts.remove(context.getRunId()),保证 complete / error / cancel 全路径覆盖
  • 查询getRuntimeContext(String runId) 精确查找;getActiveRuntimeContexts() 返回只读快照

3. API 变更

变更 说明
RuntimeContext.getRunId() 新增,始终非空
Agent.getRuntimeContext(String runId) 新增,按 runId 精确查找
Agent.getActiveRuntimeContexts() 新增,返回活动上下文
AgentBase.runLifecycle(msgs, context, doCallFn) 新增 context 参数
AgentBase.afterAgentExecution(RuntimeContext context) 新增 context 参数
ReActAgent.getRuntimeContext() (无参) 移除,使用 runId 重载替代
HarnessAgent.promoteSkill(name, reviewerId, runId) 新增 runId 参数

@gemini-code-assist

Copy link
Copy Markdown

Caution

The consumer version of Gemini Code Assist on GitHub has been sunset. All code review activity has officially ceased.

@codecov

codecov Bot commented Aug 2, 2026

Copy link
Copy Markdown

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