[ https://issues.apache.org/jira/browse/GEODE-2878?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Dick Cavender closed GEODE-2878. -------------------------------- > If an exception occurs after retrieving an XAConnection from the > ConnectionProvider but before returning it to the application, the > GemFireTransactionDataSource doesn't return it to the pool > ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- > > Key: GEODE-2878 > URL: https://issues.apache.org/jira/browse/GEODE-2878 > Project: Geode > Issue Type: Bug > Components: transactions > Reporter: Barrett Oglesby > Assignee: Mario Ivanac > Priority: Major > Labels: needs-review, pull-request-available, storage_3 > Fix For: 1.10.0 > > Time Spent: 3h 50m > Remaining Estimate: 0h > > In my test, I have 5 threads inserting rows into a derby database. > At first, as connections are being used and returned, the > {{activeConnections}} is updated correctly: > {noformat} > Thread-16: AbstractPoolCache.getPooledConnectionFromPool activeConnections=1 > Thread-15: AbstractPoolCache.getPooledConnectionFromPool activeConnections=2 > Thread-17: AbstractPoolCache.getPooledConnectionFromPool activeConnections=3 > Thread-14: AbstractPoolCache.getPooledConnectionFromPool activeConnections=4 > Thread-18: AbstractPoolCache.getPooledConnectionFromPool activeConnections=5 > Thread-16: AbstractPoolCache.returnPooledConnectionToPool activeConnections=4 > Thread-14: AbstractPoolCache.returnPooledConnectionToPool activeConnections=3 > Thread-18: AbstractPoolCache.returnPooledConnectionToPool activeConnections=2 > Thread-17: AbstractPoolCache.returnPooledConnectionToPool activeConnections=1 > Thread-15: AbstractPoolCache.returnPooledConnectionToPool activeConnections=0 > {noformat} > But, then if an exception occurs after retrieving the {{XAConnection}}, it is > not return to the {{ConnectionProvider}}. > In my test, the exception occurs in > {{GemFireTransactionDataSource.registerTranxConnection}}: > {noformat} > java.lang.Exception: GemFireTransactionDataSource-registerTranxConnection(). > Exception in registering the XAResource with the Transaction.Exception > occurred= javax.transaction.SystemException: > GlobalTransaction::enlistResource::error while enlisting XAResource > org.apache.derby.client.am.XaException: XAER_RMFAIL : An error occurred > during a deferred connect reset and the connection has been terminated. > at > org.apache.geode.internal.datasource.GemFireTransactionDataSource.registerTranxConnection(GemFireTransactionDataSource.java:218) > at > org.apache.geode.internal.datasource.GemFireTransactionDataSource.getConnection(GemFireTransactionDataSource.java:127) > at TestServer.saveToDB(TestServer.java:177) > at TestServer.save(TestServer.java:154) > at TestServer.loadEntriesIntoDerby(TestServer.java:127) > at TestServer$1.run(TestServer.java:112) > at java.lang.Thread.run(Thread.java:745) > {noformat} > This is after the {{XAConnection}} has been retrieved from the > {{ConnectionProvider}} and the {{activeConnections}} incremented, but before > it has been returned to the application. Neither the > {{registerTranxConnection}} method nor its caller ({{getConnection}}) does > anything other than to throw the exception. The {{XAConnection}} is not > returned to the pool nor is the {{activeConnections}} decremented. > Finally, if enough of these exceptions occur, the test stops because all 30 > (default max) connections are in use. They aren't really in use, its just > that the activeConnections counter hasn't been properly maintained. > {noformat} > Thread-14: AbstractPoolCache.returnPooledConnectionToPool activeConnections=28 > Thread-15: AbstractPoolCache.getPooledConnectionFromPool activeConnections=29 > Thread-14: AbstractPoolCache.getPooledConnectionFromPool activeConnections=30 > Thread-16: AbstractPoolCache.returnPooledConnectionToPool activeConnections=29 > Thread-18: AbstractPoolCache.returnPooledConnectionToPool activeConnections=28 > Thread-15: AbstractPoolCache.getPooledConnectionFromPool activeConnections=29 > Thread-17: AbstractPoolCache.getPooledConnectionFromPool activeConnections=30 > Thread-14: AbstractPoolCache.returnPooledConnectionToPool activeConnections=29 > Thread-18: AbstractPoolCache.getPooledConnectionFromPool activeConnections=30 > Thread-17: AbstractPoolCache.returnPooledConnectionToPool activeConnections=29 > Thread-14: AbstractPoolCache.getPooledConnectionFromPool activeConnections=30 > {noformat} > It doesn't really matter what the exception is. If one occurs after > retrieving the {{XAConnection}}, it needs to be returned to the > {{ConnectionProvider}} or at the very least, the {{activeConnections}} must > be decremented. -- This message was sent by Atlassian Jira (v8.3.4#803005)