Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

[Bug]: AgentEmitter remains terminal when terminal event enqueue fails

未关闭
#1,183 0 条评论 0 个 reaction 已指派 1 人 在 GitHub 查看

维护者通常 2 天内回复

@kabir 已经在做这个了。

开始于 2026年9月25日。

评估

这个 Issue 还没有评估数据。

描述

What happened?

AgentEmitter.updateStatus() and AgentEmitter.fail(A2AError) mark the emitter terminal before calling EventQueue.enqueueEvent().

If enqueueing throws, no terminal event is delivered, but the emitter remains marked terminal. DefaultRequestHandler catches the exception and attempts to report an InternalError through emitter.fail(A2AError). That fallback call then throws: IllegalStateException: Cannot update task status - terminal state already reached

The original enqueue failure is logged, but the secondary terminal state exception escapes the error handling path and prevents the fallback error event from being emitted.

Reproduction steps

This behavior is reproducible using the SDK’s built-in EventQueue, including when a terminal enqueue is interrupted while waiting for queue capacity.

  1. Create an AgentEmitter backed by an EventQueue that throws from enqueueEvent().
  2. Call a terminal operation such as emitter.complete().
  3. Catch the resulting exception, as DefaultRequestHandler does.
  4. Call emitter.fail(new InternalError()).

The fallback operation throws because the first attempt left terminalStateReached set.
Both final status updates through updateStatus() and protocol errors through fail(A2AError) set the terminal flag before enqueueing and are affected.

Reproduced with the SDK’s built-in EventQueue using a size-one queue at capacity and interrupting the terminal enqueue. This was a focused reproduction, not production log output.

Expected behavior

The SDK should handle a failed terminal enqueue without replacing the original failure with a secondary “terminal state already reached” exception. Its terminal state should remain consistent with whether a terminal event was successfully accepted for processing.

Relevant log output
Initial terminal enqueue failure:

java.lang.RuntimeException: Unable to acquire the semaphore to enqueue the event

Fallback failure:

java.lang.IllegalStateException:
Cannot update task status - terminal state already reached
Code of Conduct
  • I agree to follow this project's Code of Conduct
主要语言
Java
星标
495
派生
174
平均合并
1 天 14 小时
30 天内合并 PR
48

环境准备

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

a2aproject/a2a-java 的其他 Issue

查看 a2aproject/a2a-java 的全部 Issue

相似的 Issue

更多 Java Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。