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
*/