[WIP] fix(sse): Remove manual cancel_scope.cancel() to prevent task lifecycle violation #1493
+12
−2
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
[Work in progress, still evaluating root cause and test cases]
Summary
Fixes critical bug causing
RuntimeError: Attempted to exit cancel scope in a different task
when making sequential SSE requests in production (GCP Agent Engine). First request succeeds, subsequent requests fail with 75% failure rate.Root Cause
Manual
cancel_scope.cancel()
at line 145 violates anyio task lifecycle. In production environments with concurrent request handling, cleanup executes in different task context than setup.Solution
Remove manual cancel - let anyio's TaskGroup.aexit handle cleanup automatically. This follows anyio best practices and prevents the lifecycle violation.
Testing
Changes
tg.cancel_scope.cancel()
fromsrc/mcp/client/sse.py:145
Complete investigation: https://github.com/chalosalvador/google-adk-mcp-tools cc/ @chalosalvador