Jim Dunkerton created ISPN-2033:
-----------------------------------
Summary: JdbcBinaryCacheStore.purgeInternal() - releaseConnection() should be
called in finally block.
Key: ISPN-2033
URL:
https://issues.jboss.org/browse/ISPN-2033
Project: Infinispan
Issue Type: Bug
Components: Loaders and Stores
Affects Versions: 5.1.2.FINAL
Environment: JBoss 7.1.1 Final
Reporter: Jim Dunkerton
Assignee: Manik Surtani
A potential memory leak of pooled DB connections is present in JdbcCacheBinaryStore.
Observe the catch and finally blocks of the purgeInternal() method:
catch (SQLException ex) {
//if something happens make sure buckets locks are being release
releaseLocks(expiredBuckets);
connectionFactory.releaseConnection(conn);
log.failedClearingJdbcCacheStore(ex);
throw new CacheLoaderException("Failed clearing JdbcBinaryCacheStore",
ex);
} finally {
JdbcUtil.safeClose(ps);
JdbcUtil.safeClose(rs);
}
The pooled DB connection is not released unless an SQLException has been thrown.
Contrast with JdbcStringBasedCacheStore.purgeInternal():
} catch (SQLException ex) {
log.failedClearingJdbcCacheStore(ex);
throw new CacheLoaderException("Failed clearing string based JDBC
store", ex);
} finally {
JdbcUtil.safeClose(ps);
connectionFactory.releaseConnection(conn);
}
When using a JdbcMixedCacheStore, I noticed a DB connection leak. It appeared that for
every two connections being acquired, only one was being released. I believe it is down
to the fact that the JdbcBinaryCacheStore inside the JdbcMixedCacheStore is not releasing
its connections properly (i.e. in its finally block) whereas the JdbcStringBasedCacheStore
is.
I guess a workaround is to use only a JdbcStringBasedCacheStore, not a
JdbcMixedCacheStore.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.jboss.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see:
http://www.atlassian.com/software/jira