{{ message }}
Repository navigation
Conversation
…connections When connections are popped but never returned (leaked), the pool permanently loses those slots and eventually becomes fully exhausted. This adds a configurable maxUseTime that, when set, detects connections that have been checked out longer than the threshold and recovers their slots by allowing new connections to be created in their place. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This was referenced Sep 22, 2026
Member
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
maxUseTimeconfiguration toPoolthat enables detection of leaked connections (connections checked out longer than the threshold)Connectionobjects viamarkCheckedOut()/getCheckedOutAt()maxUseTime=0) for full backwards compatibilityProblem
The Sentry error "Pool 'console' is empty (size 75)" (CLOUD-3K4N, 3267 events) occurs when all pool connections are checked out and none are returned. This happens when connections are leaked — popped but never reclaimed due to consumer code errors, timeouts, or edge cases. Without recovery, leaked connections permanently reduce pool capacity until full exhaustion.
How it works
markCheckedOut())pop()fails to get a connection andmaxUseTime > 0, it scans active connections for any exceeding the thresholdconnectionsCreateddecremented)Test plan
testPoolRecoversStaleConnections— verifies stale connections are detected and new connections created in their placetestPoolDoesNotRecoverNonStaleConnections— verifies non-stale connections are not evictedtestPoolStaleRecoveryDisabledByDefault— verifies the feature is off whenmaxUseTime=0pint --preset psr12) passesphpstan) passes🤖 Generated with Claude Code