[infinispan-issues] [JBoss JIRA] (ISPN-2033) JdbcBinaryCacheStore.purgeInternal() - releaseConnection() should be called in finally block.

Jim Dunkerton (JIRA) jira-events at lists.jboss.org
Fri May 4 10:32:18 EDT 2012


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

        


More information about the infinispan-issues mailing list