You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ps...@apache.org on 2015/08/13 15:51:44 UTC

svn commit: r1695710 - in /commons/proper/dbcp/trunk/src: changes/changes.xml main/java/org/apache/commons/dbcp2/BasicDataSource.java test/java/org/apache/commons/dbcp2/TestBasicDataSource.java

Author: psteitz
Date: Thu Aug 13 13:51:44 2015
New Revision: 1695710

URL: http://svn.apache.org/r1695710
Log:
Dropped unecessary connection close from BasicDataSource invalidateConnection.  JIRA: DBCP-444.

Modified:
    commons/proper/dbcp/trunk/src/changes/changes.xml
    commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java
    commons/proper/dbcp/trunk/src/test/java/org/apache/commons/dbcp2/TestBasicDataSource.java

Modified: commons/proper/dbcp/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/changes/changes.xml?rev=1695710&r1=1695709&r2=1695710&view=diff
==============================================================================
--- commons/proper/dbcp/trunk/src/changes/changes.xml (original)
+++ commons/proper/dbcp/trunk/src/changes/changes.xml Thu Aug 13 13:51:44 2015
@@ -61,6 +61,9 @@ The <action> type attribute can be add,u
 
   <body>
     <release version="2.1.2" date="TBD" description="TBD">
+      <action dev="psteitz" type="fix" issue="DBCP-444">
+        InvalidateConnection can result in closed connection returned by getConnection.
+      <action>
     </release>
     <release version="2.1.1" date="6 Aug 2015" description=
  "This is a patch release, including bug fixes only.">

Modified: commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java
URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java?rev=1695710&r1=1695709&r2=1695710&view=diff
==============================================================================
--- commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java (original)
+++ commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java Thu Aug 13 13:51:44 2015
@@ -1987,13 +1987,6 @@ public class BasicDataSource implements
             throw new IllegalStateException("Cannot invalidate connection: Unwrapping poolable connection failed.", e);
         }
 
-        // attempt to close the connection for good measure
-        try {
-            connection.close();
-        } catch (Exception e) {
-            // ignore any exceptions here
-        }
-
         try {
             connectionPool.invalidateObject(poolableConnection);
         } catch (Exception e) {

Modified: commons/proper/dbcp/trunk/src/test/java/org/apache/commons/dbcp2/TestBasicDataSource.java
URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/test/java/org/apache/commons/dbcp2/TestBasicDataSource.java?rev=1695710&r1=1695709&r2=1695710&view=diff
==============================================================================
--- commons/proper/dbcp/trunk/src/test/java/org/apache/commons/dbcp2/TestBasicDataSource.java (original)
+++ commons/proper/dbcp/trunk/src/test/java/org/apache/commons/dbcp2/TestBasicDataSource.java Thu Aug 13 13:51:44 2015
@@ -719,6 +719,43 @@ public class TestBasicDataSource extends
     }
     
     /**
+     * JIRA: DBCP-444
+     * Verify that invalidate does not return closed connection to the pool.
+     */
+    @Test
+    public void testConcurrentInvalidateBorrow() throws Exception {
+        ds.setDriverClassName("org.apache.commons.dbcp2.TesterConnRequestCountDriver");
+        ds.setUrl("jdbc:apache:commons:testerConnRequestCountDriver");
+        ds.setTestOnBorrow(true);
+        ds.setValidationQuery("SELECT DUMMY FROM DUAL");
+        ds.setMaxTotal(8);
+        ds.setLifo(true);
+        ds.setMaxWaitMillis(-1);
+        
+        // Threads just borrow and return - validation will trigger close check
+        TestThread testThread1 = new TestThread(1000,0);
+        Thread t1 = new Thread(testThread1);
+        t1.start();
+        TestThread testThread2 = new TestThread(1000,0);
+        Thread t2 = new Thread(testThread1);
+        t2.start();
+        
+        // Grab and invalidate connections
+        for (int i = 0; i < 1000; i++) {
+            Connection conn = ds.getConnection();
+            ds.invalidateConnection(conn);
+        }
+        
+        // Make sure borrow threads complete successfully
+        t1.join();
+        t2.join();
+        assertFalse(testThread1.failed());
+        assertFalse(testThread2.failed());
+        
+        ds.close();
+    }
+    
+    /**
      * Make sure setting jmxName to null suppresses JMX registration of connection and statement pools.
      * JIRA: DBCP-434
      */