[ 
https://issues.apache.org/jira/browse/GEODE-2878?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16866837#comment-16866837
 ] 

ASF subversion and git services commented on GEODE-2878:
--------------------------------------------------------

Commit d05adfa3380d890358cb01089625d8c33f1674c4 in geode's branch 
refs/heads/develop from Kirk Lund
[ https://gitbox.apache.org/repos/asf?p=geode.git;h=d05adfa ]

GEODE-2878: Fixup GemFireTransactionDataSourceIntegrationTest

* Use TemporaryFolder
* Remove thread sleeps
* Disable ENABLE_NETWORK_PARTITION_DETECTION
* Convert assertions to AssertJ

Closes #3538


> 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: Barry Oglesby
>            Assignee: Mario Ivanac
>            Priority: Major
>              Labels: needs-review, pull-request-available, storage_3
>          Time Spent: 3h 20m
>  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
(v7.6.3#76005)

Reply via email to