fix: Clean up sessions from manager when terminated via DELETE request#791
Closed
1ytic wants to merge 1 commit intomodelcontextprotocol:mainfrom
Closed
fix: Clean up sessions from manager when terminated via DELETE request#7911ytic wants to merge 1 commit intomodelcontextprotocol:mainfrom
1ytic wants to merge 1 commit intomodelcontextprotocol:mainfrom
Conversation
Previously, StreamableHTTPSessionManager would not remove sessions from its _server_instances dictionary when clients sent DELETE requests to terminate sessions. This caused terminated sessions to remain in memory until server shutdown, leading to potential memory accumulation in long-running servers. This change adds a callback mechanism between StreamableHTTPServerTransport and StreamableHTTPSessionManager to properly clean up terminated sessions: - Add on_session_terminated callback parameter to StreamableHTTPServerTransport - Implement _on_session_terminated method in StreamableHTTPSessionManager - Call callback from _terminate_session when DELETE request terminates session - Update HTTP status codes: return 404 NOT_FOUND for unknown session IDs - Add comprehensive test to verify session cleanup functionality Sessions are now automatically removed from the manager's memory when explicitly terminated via DELETE requests, preventing memory leaks while maintaining backward compatibility. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary
This PR fixes a memory leak issue in
StreamableHTTPSessionManagerwhere sessions were not being cleaned up from the manager's internal dictionary when terminated via DELETE requests.Problem
Previously, when clients sent DELETE requests to terminate sessions:
StreamableHTTPServerTransportwould mark itself as terminatedStreamableHTTPSessionManagerwould continue to hold references to these terminated sessions in its_server_instancesdictionarySolution
Added a callback mechanism to properly clean up terminated sessions:
StreamableHTTPServerTransportconstructor (on_session_terminated)StreamableHTTPSessionManager(_on_session_terminated)Technical Details
StreamableHTTPServerTransport._terminate_session()now calls the callbackStreamableHTTPSessionManager._server_instancesTest Plan
test_session_cleanup_on_delete_requestBackward Compatibility
✅ This change is fully backward compatible - no breaking changes to existing APIs.
Generated with Claude Code