Repository navigation
Cancel pool connection timeout timer when acquisition fails - #1712
Merged
tsegismont merged 2 commits intoOct 8, 2026
Merged
tsegismont merged 2 commits into
tsegismont merged 2 commits into
Conversation
vietj
reviewed
Sep 28, 2026
Member
|
@goutamadwant can you make it a single commit with a proper commit message ? |
See eclipse-vertx#1706 When a pooled query fails to acquire a connection, the connection timeout timer is not cancelled, so it fails the query handler a second time when it fires. When the timer fires first, the acquisition failure also fails the handler again. Handle the acquisition failure like a successful acquisition: cancel the timer, and if it already fired, do not complete the handler again. Signed-off-by: Goutam Adwant <workwithgoutam@gmail.com>
Signed-off-by: Goutam Adwant <workwithgoutam@gmail.com>
tsegismont
force-pushed
the
fix/pool-execute-timer-on-acquire-failure
branch
from
October 8, 2026 13:13
5bdbcd0 to
1edf65c
Compare
tsegismont
approved these changes
Oct 8, 2026
tsegismont
left a comment
Member
There was a problem hiding this comment.
LGTM, thank you @goutamadwant
tsegismont
added a commit
that referenced
this pull request
Oct 8, 2026
…1750) * Cancel pool connection timeout timer when acquisition fails See #1706 When a pooled query fails to acquire a connection, the connection timeout timer is not cancelled, so it fails the query handler a second time when it fires. When the timer fires first, the acquisition failure also fails the handler again. Handle the acquisition failure like a successful acquisition: cancel the timer, and if it already fired, do not complete the handler again. * Use if/else in the acquisition failure branch --------- Signed-off-by: Goutam Adwant <workwithgoutam@gmail.com> Co-authored-by: Goutam Adwant <8672451+goutamadwant@users.noreply.github.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.
See #1706
When
SqlConnectionPool.executefails to acquire a connection, the connection-timeout timer is left armed. The timer later fires and callshandler.failon an already-completed promise, throwingIllegalStateException: Result is already complete.The success path already cancels the timer (added in #1586) and handles the race when the timer fires first (added in e290886). The failure path was missing both: it neither cancelled the timer nor guarded against the timer having already fired.
The fix mirrors the success-path pattern: attempt to cancel the timer in the failure branch. If
cancelTimerreturnsfalse(the timer already fired and completed the handler), propagatePOOL_QUERY_TIMEOUT_EXCEPTIONso the existing guard inonCompleteskips the redundanthandler.fail.Tests cover both race orderings — acquisition fails before the timer, and timer fires before acquisition fails — without requiring a database.