-
Notifications
You must be signed in to change notification settings - Fork 2.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Cleanup of broken connections not working (2.3.0-rc3) #220
Comments
If you enable debug logging, after the " marked as broken because of SQLSTATE(08006), ErrorCode(0)" exception, do you get a log that says something like "Connection returned to pool app [pool] is broken or evicted. Closing connection."? |
Any update on this issue? I'm away from my computer until this coming Friday, but I can try to reproduce the issue then. |
Sorry for the late response. With HikariCP 2.2.5 there is an additional WARN and DEBUG:
Using HikariCP 2.3.0 RC3 there is a WARN when doing a rollback after the failed query.
A log message about returning the connection back to the pool (and closing) is missing. I am using eclipselink to reproduce the issue in a dev-version of our app. It seems that eclipselink is never returning the connection, because the connection is reported as closed and is actually closed (no more connections visible to postgres). The pool instead reports all connections are in use. Just a note: btw: the connection leak detection gets also triggered if enabled |
this might also be interesting:
The log message "marked as broken because of SQLSTATE" appears when executing the query. in 2.2.5
The message gets logged when rollback is called, not when the query fails. Maybe that change causes the error/incompatibility? |
Interesting. Good clues. |
… should reflect HikariCP's understanding of the closed state rather than delegating to the driver.
Hi, 2015-01-06 09:21:36.762 [Hikari Housekeeping Timer (pool HikariPool-0)] WARN com.zaxxer.hikari.util.LeakTask - Connection leak detection triggered, stack trace follows I am using spring and hibernate. My beans are transactional so there is a transaction boundary (via @transactional annotation). The only Hikari properties I am setting explicitly are below: my spring config for datasource and hikari are below:
is there anything I can do to instruct hikari to recycle the broken/leaked connections so that I don't have to keep restarting the system every few days as currently the case. I tried to trace the source of leak but unable to locate it since I am not acquiring or releasing any connections myself (it is all hibernate and spring doing the work) |
@abdelgadir this looks unrelated to the source of this bug, which was caused by the removal of an overriden method in our Connection proxy in the 2.3.0 release candidate, but should not be an issue in 2.2.5. It looks like you've run into a Hibernate bug, fixed in 4.2.16, see bug HHH-9312 in the release notes for Hibernate 4.2.16. Additionally, release 4.2.15 introduced a connection provider for HikariCP, which I would highly recommend over the injected datasource connection provider you are using now. See our wiki for several ways to configure HikariCP with Spring+Hibernate. |
@dfex55 2.3.0-rc4 has been published to the sonatype staging repository, can you give it a try? |
2.3.0-rc4 fixed the issue. Thank you. |
thank you very much for quick response. I will take a look into the hibernate issues and will look to upgrade both libraries |
Version 2.3.0-rc3 (and some previous snapshots) of HikariCP does not cleanup broken connections, although they seem to be recognized as broken.
The broken connections stay in the pool. If many connections are broken, the pool will be filled till maximum pool size is reached. After the max size is reached, no new connections will be created by calling getConnection().
How to test:
Use the following configuration:
Every query longer than one second will be terminated by the postgres jdbc driver with an exception.
Expected behavior should be:
The last getConnection() call returns a valid connection
Here is what happens with 2.3.0-rc3:
five times:
After that in the DEBUG log:
If getConnection() is called now, the following exception will be thrown:
This state is permanent. The connection pool will not recover itself over time!
Trying the same with HikariCP 2.2.5 shows the expected behavior:
five times:
The DEBUG log shows:
Note: the pool is empty -> good
A call to getConnection() works as expected.
The text was updated successfully, but these errors were encountered: