Added check with exceptionOverride in case of connection dead#2045
Open
janario wants to merge 1 commit intobrettwooldridge:devfrom
Open
Added check with exceptionOverride in case of connection dead#2045janario wants to merge 1 commit intobrettwooldridge:devfrom
janario wants to merge 1 commit intobrettwooldridge:devfrom
Conversation
Author
|
This is the current stack on version 4.x where the connection failover is detected, switched and hikari ends up discarding the connections. |
janario
commented
Mar 3, 2023
| poolName, connection, e.getMessage()); | ||
| } | ||
|
|
||
| boolean isConnectionDead(final Connection connection) |
Author
There was a problem hiding this comment.
The major change is here.
In case of exception let the exceptionOverride decide if the connection is good or not, and give it another try since it can be an exception of recovery (e.g. failover switch)
6d319ab to
7cacd0f
Compare
d7a9b2f to
e56fa46
Compare
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.
I'm open to suggestions and exploring more on the scenario. :-)
Scenario:
We are trying to take advantage of the
aws-mysql-jdbcfailover plugin.According to their documentation, they can detect the failover make the switch writer<>reader but an exception will still be thrown to be handled by the pool provider, in our case HikariCP. https://github.com/awslabs/aws-mysql-jdbc#connection-pooling
For the normal scenario, it is ok:
SQLExceptionOverrideand decide to discard or not based on its results08S02and08007connection is kept and the next interaction everything will be fineThe problem is when acquiring a connection from the pool, the driver has to throw the exception since it is not aware it is in the middle of a transaction of not. But HikariCP doesn't use the
SQLExceptionOverrideat this point, making a good connection to be discarded.On top of that, in an idle application, the entire pool will be discarded due to the failover, which can occur even hours after the failover has happened.
With the current PR we would use the
SQLExceptionOverrideto decide if the connection is really dead or not by doing one more retry if the error code is aDO_NOT_EVICT.