Author: fhanik
Date: Thu Jan 6 23:53:11 2011
New Revision: 1056125
URL: http://svn.apache.org/viewvc?rev=1056125&view=rev
Log:
Fix bug https://issues.apache.org/bugzilla/show_bug.cgi?id=50477
Added:
tomcat/trunk/modules/jdbc-pool/test/org/apache/tomcat/jdbc/test/Async0IdleTestBug50477.java
(with props)
Modified:
tomcat/trunk/modules/jdbc-pool/.classpath
tomcat/trunk/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java
Modified: tomcat/trunk/modules/jdbc-pool/.classpath
URL:
http://svn.apache.org/viewvc/tomcat/trunk/modules/jdbc-pool/.classpath?rev=1056125&r1=1056124&r2=1056125&view=diff
==============================================================================
--- tomcat/trunk/modules/jdbc-pool/.classpath (original)
+++ tomcat/trunk/modules/jdbc-pool/.classpath Thu Jan 6 23:53:11 2011
@@ -6,5 +6,6 @@
<classpathentry kind="var"
path="TOMCAT_LIBS_BASE/tomcat7-deps/dbcp/tomcat-dbcp.jar"
sourcepath="/TOMCAT_LIBS_BASE/tomcat6-deps/dbcp/src/java"/>
<classpathentry kind="con"
path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry combineaccessrules="false" kind="src"
path="/tomcat-7.0.x"/>
+ <classpathentry kind="lib" path="includes/h2/bin/h2-1.2.129.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>
Modified:
tomcat/trunk/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java?rev=1056125&r1=1056124&r2=1056125&view=diff
==============================================================================
---
tomcat/trunk/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java
(original)
+++
tomcat/trunk/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java
Thu Jan 6 23:53:11 2011
@@ -140,6 +140,10 @@ public class ConnectionPool {
* @throws SQLException
*/
public Future<Connection> getConnectionAsync() throws SQLException {
+ PooledConnection pc = this.borrowConnection(0, null, null);
+ if (pc!=null) {
+ return new ConnectionFuture(pc);
+ }
//we can only retrieve a future if the underlying queue supports it.
if (idle instanceof FairBlockingQueue<?>) {
Future<PooledConnection> pcf =
((FairBlockingQueue<PooledConnection>)idle).pollAsync();
@@ -1040,15 +1044,21 @@ public class ConnectionPool {
Connection result = null;
SQLException cause = null;
AtomicBoolean cancelled = new AtomicBoolean(false);
+ volatile PooledConnection pc = null;
public ConnectionFuture(Future<PooledConnection> pcf) {
this.pcFuture = pcf;
}
+ public ConnectionFuture(PooledConnection pc) {
+ this.pc = pc;
+ }
/**
* {...@inheritdoc}
*/
public boolean cancel(boolean mayInterruptIfRunning) {
- if ((!cancelled.get()) && cancelled.compareAndSet(false, true)) {
+ if (pc!=null) {
+ return false;
+ } else if ((!cancelled.get()) && cancelled.compareAndSet(false,
true)) {
//cancel by retrieving the connection and returning it to the
pool
ConnectionPool.this.cancellator.execute(this);
}
@@ -1070,7 +1080,7 @@ public class ConnectionPool {
* {...@inheritdoc}
*/
public Connection get(long timeout, TimeUnit unit) throws
InterruptedException, ExecutionException, TimeoutException {
- PooledConnection pc = pcFuture.get(timeout,unit);
+ PooledConnection pc =
this.pc!=null?this.pc:pcFuture.get(timeout,unit);
if (pc!=null) {
if (result!=null) return result;
if (configured.compareAndSet(false, true)) {
@@ -1097,14 +1107,14 @@ public class ConnectionPool {
* {...@inheritdoc}
*/
public boolean isCancelled() {
- return pcFuture.isCancelled() || cancelled.get();
+ return pc==null && (pcFuture.isCancelled() || cancelled.get());
}
/**
* {...@inheritdoc}
*/
public boolean isDone() {
- return pcFuture.isDone();
+ return pc!=null || pcFuture.isDone();
}
/**
Added:
tomcat/trunk/modules/jdbc-pool/test/org/apache/tomcat/jdbc/test/Async0IdleTestBug50477.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/modules/jdbc-pool/test/org/apache/tomcat/jdbc/test/Async0IdleTestBug50477.java?rev=1056125&view=auto
==============================================================================
---
tomcat/trunk/modules/jdbc-pool/test/org/apache/tomcat/jdbc/test/Async0IdleTestBug50477.java
(added)
+++
tomcat/trunk/modules/jdbc-pool/test/org/apache/tomcat/jdbc/test/Async0IdleTestBug50477.java
Thu Jan 6 23:53:11 2011
@@ -0,0 +1,50 @@
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.tomcat.jdbc.test;
+
+import java.sql.Connection;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.tomcat.jdbc.pool.DataSourceProxy;
+
+/**
+ * @author Filip Hanik
+ * @version 1.0
+ */
+public class Async0IdleTestBug50477 extends DefaultTestCase {
+ public Async0IdleTestBug50477(String name) {
+ super(name);
+ }
+
+
+ public void testAsync0Idle0Size() throws Exception {
+ System.out.println("[testPoolThreads20Connections10FairAsync] Starting
fairness - Tomcat JDBC - Fair - Async");
+ init();
+ this.datasource.getPoolProperties().setMaxActive(10);
+ this.datasource.getPoolProperties().setFairQueue(true);
+ this.datasource.getPoolProperties().setInitialSize(0);
+ try {
+ Future<Connection> cf =
((DataSourceProxy)datasource).getConnectionAsync();
+ Connection con = cf.get(5, TimeUnit.SECONDS);
+ }finally {
+ tearDown();
+ }
+ }
+}
+
Propchange:
tomcat/trunk/modules/jdbc-pool/test/org/apache/tomcat/jdbc/test/Async0IdleTestBug50477.java
------------------------------------------------------------------------------
svn:eol-style = native
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]