commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Gary Gregory (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (DBCP-484) Connection leak during XATransaction in high load
Date Mon, 29 Jan 2018 20:41:00 GMT

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

Gary Gregory commented on DBCP-484:
-----------------------------------

OK, let us know when you get that unit test working/failing. Above, I meant Apache Commons
POOL 2.5.0 coupled with Apache Commons DBCP 2.2.0.

> Connection leak during XATransaction in high load
> -------------------------------------------------
>
>                 Key: DBCP-484
>                 URL: https://issues.apache.org/jira/browse/DBCP-484
>             Project: Commons Dbcp
>          Issue Type: Bug
>    Affects Versions: 2.2.0
>            Reporter: Emanuel Freitas
>            Priority: Major
>
> We're experiencing a connection leak in a distributed transaction when the system is
under heavy load. We're using commons-dbcp (latest version) + eclipselink and narayana to
perform transaction coordination.
> From time to time we can see a stacktrace reporting an abandoned connection. We are trying
to figure out what's the root cause and we think that might be some issue in the commons dbcp
(not sure) . More specifically, this parte of the code:
> ManagedConnection#updateTransactionStatus
> {code:java}
> if (transactionContext != null) {
>     if (transactionContext.isActive()) {
>         if (transactionContext != transactionRegistry.getActiveTransactionContext())
{
>             throw new SQLException("Connection can not be used while enlisted in another
transaction");
>         }
>         return;
>     }
>     // transaction should have been cleared up by TransactionContextListener, but in
>     // rare cases another lister could have registered which uses the connection before
>     // our listener is called.  In that rare case, trigger the transaction complete call
now
>     transactionComplete();    
> }{code}
>  
> If the transactionContext is different than null but the state is not "active" (ex: STATUS_ROLLEDBACK,
STATUS_ROLLING_BACK, etc) it executes the transactionComplete mothod that clears the reference
to a shared connection and after that the connection is never closed (returned to the pool). 
>  
> If we move the transactionComplete(); to an else,(see below), the connection leak does
not happen.
> {code:java}
> if (transactionContext != null) {
>     if (transactionContext.isActive()) {
>         if (transactionContext != transactionRegistry.getActiveTransactionContext())
{
>             throw new SQLException("Connection can not be used while enlisted in another
transaction");
>         }
>         return;
>     }
> } else {
>     transactionComplete();
> }{code}
>  
> After this the dbcp unit tests still pass but I'm not sure about this changes. Can you
please check?
> Thanks
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Mime
View raw message