Skip to content

fix: Eliminate race condition in testInputRequiredWorkflow#630

Merged
kabir merged 1 commit intoa2aproject:mainfrom
kabir:racecondition
Feb 5, 2026
Merged

fix: Eliminate race condition in testInputRequiredWorkflow#630
kabir merged 1 commit intoa2aproject:mainfrom
kabir:racecondition

Conversation

@kabir
Copy link
Collaborator

@kabir kabir commented Feb 5, 2026

The test consumers were counting down their latches on the FIRST TaskEvent received, which could be the intermediate WORKING state instead of the expected terminal state (INPUT_REQUIRED or COMPLETED).

This caused intermittent test failures with:
expected: <INPUT_REQUIRED> but was:

Fix: Both consumers now only count down when receiving the expected terminal state:

  • initialConsumer waits for INPUT_REQUIRED (not WORKING)
  • completionConsumer waits for COMPLETED (not WORKING)

This matches the agent's event emission pattern:
agentEmitter.startWork() // WORKING state
agentEmitter.requiresInput(...) // INPUT_REQUIRED state
...later...
agentEmitter.startWork() // WORKING state
agentEmitter.complete() // COMPLETED state

@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @kabir, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request resolves an intermittent test failure in testInputRequiredWorkflow caused by a race condition. The changes refine the conditions under which test consumers signal completion, ensuring that tests accurately await specific terminal task states. This enhancement significantly improves the reliability and stability of the test suite by eliminating false negatives due to premature latch countdowns.

Highlights

  • Test Reliability Improvement: Modified the testInputRequiredWorkflow to prevent race conditions by ensuring test consumers only count down their latches upon receiving the expected terminal TaskState (either INPUT_REQUIRED or COMPLETED), rather than intermediate WORKING states.
Changelog
  • tests/server-common/src/test/java/io/a2a/server/apps/common/AbstractA2AServerTest.java
    • Updated the initialConsumer within testInputRequiredWorkflow to only decrement initialLatch when the task state explicitly reaches INPUT_REQUIRED.
    • Updated the completionConsumer within testInputRequiredWorkflow to only decrement completionLatch when the task state explicitly reaches COMPLETED.
Activity
  • No specific activity has been recorded for this pull request yet.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request correctly fixes a race condition in testInputRequiredWorkflow by ensuring the test consumers wait for the specific expected task state before counting down their latches. This makes the test more reliable. My review includes suggestions to further improve the test's robustness by making the consumers idempotent, which will prevent potential race conditions where late-arriving events could cause assertions to fail.

The test consumers were counting down their latches on the FIRST TaskEvent
received, which could be the intermediate WORKING state instead of the
expected terminal state (INPUT_REQUIRED or COMPLETED).

This caused intermittent test failures with:
  expected: <INPUT_REQUIRED> but was: <WORKING>

Fix: Both consumers now only count down when receiving the expected
terminal state:
- initialConsumer waits for INPUT_REQUIRED (not WORKING)
- completionConsumer waits for COMPLETED (not WORKING)

This matches the agent's event emission pattern:
  agentEmitter.startWork()    // WORKING state
  agentEmitter.requiresInput(...) // INPUT_REQUIRED state
  ...later...
  agentEmitter.startWork()    // WORKING state
  agentEmitter.complete()     // COMPLETED state
@kabir kabir merged commit 3dfa2bf into a2aproject:main Feb 5, 2026
8 checks passed
@kabir kabir deleted the racecondition branch February 5, 2026 17:05
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