commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "William R. Speirs (Commented) (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (DBCP-376) Thread safety issue
Date Wed, 25 Jan 2012 14:54:40 GMT

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

William R. Speirs commented on DBCP-376:
----------------------------------------

For what it's worth, all of the creating of the table and selects calls don't impact the issue.
I've stripped down the run method in the thread to the following and still get similar errors
(SELECT_LOOPS = 5000):

{code:java}
        public void run() {
            Connection c = null;
            try {
                for (int j=0; j < SELECT_LOOPS; j++) {
                    c = ds.getConnection();

                    c.close();
                }
            } catch (SQLException sqle) {
                handleException(sqle);
            }
        }
{code}

{noformat}
Loading JDBC driver:
JDBC driver loaded succesfully
Exception in thread "Thread-161" java.lang.IllegalStateException: close() was called on a
Connection, but I have no record of the underlying PooledConnection.
	at org.apache.commons.dbcp.datasources.KeyedCPDSConnectionFactory.connectionClosed(KeyedCPDSConnectionFactory.java:249)
	at org.apache.commons.dbcp.cpdsadapter.PooledConnectionImpl.notifyListeners(PooledConnectionImpl.java:229)
	at org.apache.commons.dbcp.cpdsadapter.ConnectionImpl.close(ConnectionImpl.java:78)
	at com.daveoxley.dbcpbug.App$TestThread.run(App.java:96)
	at java.lang.Thread.run(Thread.java:662)

Exception in thread "Thread-143" java.lang.IllegalStateException: close() was called on a
Connection, but I have no record of the underlying PooledConnection.
	at org.apache.commons.dbcp.datasources.KeyedCPDSConnectionFactory.connectionClosed(KeyedCPDSConnectionFactory.java:249)
	at org.apache.commons.dbcp.cpdsadapter.PooledConnectionImpl.notifyListeners(PooledConnectionImpl.java:229)
	at org.apache.commons.dbcp.cpdsadapter.ConnectionImpl.close(ConnectionImpl.java:78)
	at com.daveoxley.dbcpbug.App$TestThread.run(App.java:96)
	at java.lang.Thread.run(Thread.java:662)

java.sql.SQLException: PooledConnection was reused, withoutits previous Connection being closed.
	at org.apache.commons.dbcp.cpdsadapter.PooledConnectionImpl.getConnection(PooledConnectionImpl.java:179)
	at org.apache.commons.dbcp.datasources.InstanceKeyDataSource.getConnection(InstanceKeyDataSource.java:768)
	at org.apache.commons.dbcp.datasources.InstanceKeyDataSource.getConnection(InstanceKeyDataSource.java:676)
	at com.daveoxley.dbcpbug.App$TestThread.run(App.java:94)
	at java.lang.Thread.run(Thread.java:662)

java.sql.SQLException: PooledConnection was reused, withoutits previous Connection being closed.
	at org.apache.commons.dbcp.cpdsadapter.PooledConnectionImpl.getConnection(PooledConnectionImpl.java:179)
	at org.apache.commons.dbcp.datasources.InstanceKeyDataSource.getConnection(InstanceKeyDataSource.java:768)
	at org.apache.commons.dbcp.datasources.InstanceKeyDataSource.getConnection(InstanceKeyDataSource.java:676)
	at com.daveoxley.dbcpbug.App$TestThread.run(App.java:94)
	at java.lang.Thread.run(Thread.java:662)

java.sql.SQLException: Attempted to use PooledConnection after closed() was called.
	at org.apache.commons.dbcp.cpdsadapter.PooledConnectionImpl.assertOpen(PooledConnectionImpl.java:163)
	at org.apache.commons.dbcp.cpdsadapter.PooledConnectionImpl.getConnection(PooledConnectionImpl.java:174)
	at org.apache.commons.dbcp.datasources.InstanceKeyDataSource.getConnection(InstanceKeyDataSource.java:768)
	at org.apache.commons.dbcp.datasources.InstanceKeyDataSource.getConnection(InstanceKeyDataSource.java:676)
	at com.daveoxley.dbcpbug.App$TestThread.run(App.java:94)
	at java.lang.Thread.run(Thread.java:662)

java.sql.SQLException: PooledConnection was reused, withoutits previous Connection being closed.
	at org.apache.commons.dbcp.cpdsadapter.PooledConnectionImpl.getConnection(PooledConnectionImpl.java:179)
	at org.apache.commons.dbcp.datasources.InstanceKeyDataSource.getConnection(InstanceKeyDataSource.java:768)
	at org.apache.commons.dbcp.datasources.InstanceKeyDataSource.getConnection(InstanceKeyDataSource.java:676)
	at com.daveoxley.dbcpbug.App$TestThread.run(App.java:94)
	at java.lang.Thread.run(Thread.java:662)
{noformat}
                
> Thread safety issue
> -------------------
>
>                 Key: DBCP-376
>                 URL: https://issues.apache.org/jira/browse/DBCP-376
>             Project: Commons Dbcp
>          Issue Type: Bug
>    Affects Versions: 1.3
>            Reporter: Dave Oxley
>            Priority: Critical
>         Attachments: dbcp_bug.tar.gz
>
>
> Under high load commons-dbcp (or commons-pool) exhibits thread safety issues and begins
throwing various exceptions. I don't yet know the cause of the issue but it looks like a connection
maybe handed out to multiple threads concurrently. Here's a few examples of the exceptions
we are getting:
> {noformat}
> jvm 1    | Caused by: java.sql.SQLException: Attempted to use PooledConnection after
closed() was called.
> jvm 1    |      at org.apache.commons.dbcp.cpdsadapter.PooledConnectionImpl.assertOpen(PooledConnectionImpl.java:163)
> jvm 1    |      at org.apache.commons.dbcp.cpdsadapter.PooledConnectionImpl.getConnection(PooledConnectionImpl.java:174)
> jvm 1    |      at org.apache.commons.dbcp.datasources.InstanceKeyDataSource.getConnection(InstanceKeyDataSource.java:768)
> jvm 1    |      at org.apache.commons.dbcp.datasources.InstanceKeyDataSource.getConnection(InstanceKeyDataSource.java:676)
> jvm 1    |      at uk.co.webessence.kernel.database.DriverAdapterConnectionPool.acquireConnection(DriverAdapterConnectionPool.java:101)
> jvm 1    |      ... 94 more
> {noformat}
> {noformat}
> jvm 1    | Caused by: java.sql.SQLException: PooledConnection was reused, withoutits
previous Connection being closed.
> jvm 1    |      at org.apache.commons.dbcp.cpdsadapter.PooledConnectionImpl.getConnection(PooledConnectionImpl.java:179)
> jvm 1    |      at org.apache.commons.dbcp.datasources.InstanceKeyDataSource.getConnection(InstanceKeyDataSource.java:768)
> jvm 1    |      at org.apache.commons.dbcp.datasources.InstanceKeyDataSource.getConnection(InstanceKeyDataSource.java:676)
> jvm 1    |      at uk.co.webessence.kernel.database.DriverAdapterConnectionPool.acquireConnection(DriverAdapterConnectionPool.java:101)
> jvm 1    |      ... 77 more
> {noformat}
> {noformat}
> jvm 1    | Caused by: java.sql.SQLException: Invalid state, the ResultSet object is closed.
> jvm 1    |      at net.sourceforge.jtds.jdbc.JtdsResultSet.checkOpen(JtdsResultSet.java:299)
> jvm 1    |      at net.sourceforge.jtds.jdbc.JtdsResultSet.getColumn(JtdsResultSet.java:273)
> jvm 1    |      at net.sourceforge.jtds.jdbc.JtdsResultSet.getObject(JtdsResultSet.java:840)
> jvm 1    |      at org.apache.commons.dbcp.DelegatingResultSet.getObject(DelegatingResultSet.java:325)
> jvm 1    |      at uk.co.webessence.kernel.persistence.Preloader.getDataArray(Preloader.java:428)
> jvm 1    |      at uk.co.webessence.kernel.persistence.Preloader.processSingleRow(Preloader.java:175)
> jvm 1    |      at uk.co.webessence.kernel.persistence.PersistenceHandler.processRecordReload(PersistenceHandler.java:471)
> jvm 1    |      at uk.co.webessence.kernel.persistence.PersistenceHandler$1.doLoad(PersistenceHandler.java:447)
> jvm 1    |      ... 71 more
> {noformat}
> {noformat}
> Message:   TDS Protocol error: Invalid packet type 0x4
> jvm 1    | Caused by: java.sql.SQLException: TDS Protocol error: Invalid packet type
0x4
> jvm 1    |      at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2314)
> jvm 1    |      at net.sourceforge.jtds.jdbc.TdsCore.getNextRow(TdsCore.java:764)
> jvm 1    |      at net.sourceforge.jtds.jdbc.JtdsResultSet.next(JtdsResultSet.java:593)
> jvm 1    |      at org.apache.commons.dbcp.DelegatingResultSet.next(DelegatingResultSet.java:207)
> jvm 1    |      at uk.co.webessence.kernel.persistence.Preloader.loadData(Preloader.java:142)
> jvm 1    |      at uk.co.webessence.kernel.persistence.PersistenceHandler$3.doLoad(PersistenceHandler.java:592)
> jvm 1    |      ... 111 more
> jvm 1    | Caused by: net.sourceforge.jtds.jdbc.ProtocolException: Invalid packet type
0x4
> jvm 1    |      at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2301)
> jvm 1    |      ... 116 more
> {noformat}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Mime
View raw message