Revisit connection pinning logic for edge cases #74
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.
The new implementation with connection pinning introduces a couple of edge cases that this PR introduces a test reproduction for. Namely, the case where we're trying to concurrently execute more
find
queries than we have connections in the pool.This creates a scenario where queries are stuck waiting for existing cursors to be exhausted before checking out a new connection; in the worst case, the existing cursors may time out or never close, causing the connections to stay in a checked-out state indefinitely.
We're proposing a solution below; however, this will require a change to the driver:
Right now there isn't an
Open()
function indriver.Connection
interface that we can leverage to check out the same connection for a cursorID -- the existingcheckoutConnection
function indriver.Server
only takes in a context and returns a random connection.This solution will mimic the old implementation's logic, where connections are checked in and out after each operation and shared amongst queries. This way we won't have to exhaust the pool with checked out connections and have queries wait until entire
find
operations are finished.