fix(bigquery): Fix bigquery socket leak - #17953
Draft
chalmerlowe wants to merge 8 commits into
Draft
Conversation
Contributor
There was a problem hiding this comment.
Code Review
This pull request refactors the test_dbapi_connection_does_not_leak_sockets system test to use a more deterministic approach by patching and tracking HTTP sessions and gRPC channels instead of relying on flaky psutil socket counts. The review feedback suggests using sets instead of lists to track these objects, which prevents potential flakiness from duplicate close() calls and simplifies both the assertions and the cleanup logic.
…or symmetry and isolation
…ecks in Connection.close()
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.
This Pull Request addresses flakiness in the socket leak system test and improves resource cleanup in the Database API (DB-API) connection.
Problem
test_dbapi_connection_does_not_leak_socketswas flaky in Continuous Integration (CI) environments because it relied on thepsutillibrary to count Operating System sockets. Socket pooling, delayed garbage collection, and background noise make counting Operating System sockets non-deterministic.Solution
requests.Sessionandgrpc.Channelobjects using instance-level monkey patching. This ensures that every session or channel opened by the connection is explicitly accounted for and closed, independent of Operating System quirks.Connection.close()inconnection.pyto close all created cursors before closing the clients themselves. This ensures that cursors release their references to query data and transports first. Added defensive checks to prevent errors if clients areNone.Note
psutilor artificial sleeps, making it faster and fully deterministic.