Added check with exceptionOverride in case of connection dead #2045
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-jdbc
failover 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:
SQLExceptionOverride
and decide to discard or not based on its results08S02
and08007
connection 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
SQLExceptionOverride
at 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
SQLExceptionOverride
to decide if the connection is really dead or not by doing one more retry if the error code is aDO_NOT_EVICT
.