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: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org