[ 
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

        

Reply via email to