Return-Path: Delivered-To: apmail-hc-commits-archive@www.apache.org Received: (qmail 22586 invoked from network); 6 Dec 2010 20:44:02 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 6 Dec 2010 20:44:02 -0000 Received: (qmail 28389 invoked by uid 500); 6 Dec 2010 20:44:02 -0000 Delivered-To: apmail-hc-commits-archive@hc.apache.org Received: (qmail 28340 invoked by uid 500); 6 Dec 2010 20:44:02 -0000 Mailing-List: contact commits-help@hc.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: "HttpComponents Project" Delivered-To: mailing list commits@hc.apache.org Received: (qmail 28333 invoked by uid 99); 6 Dec 2010 20:44:02 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 06 Dec 2010 20:44:02 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 06 Dec 2010 20:44:01 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 111CE23889B2; Mon, 6 Dec 2010 20:43:41 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1042785 - in /httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http: impl/nio/client/ impl/nio/conn/ impl/nio/pool/ nio/conn/ Date: Mon, 06 Dec 2010 20:43:40 -0000 To: commits@hc.apache.org From: olegk@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20101206204341.111CE23889B2@eris.apache.org> Author: olegk Date: Mon Dec 6 20:43:40 2010 New Revision: 1042785 URL: http://svn.apache.org/viewvc?rev=1042785&view=rev Log: Added parameters to specify a connect timeout when leasing an I/O session Modified: httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/impl/nio/client/DefaultAsyncRequestDirector.java httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/impl/nio/conn/BasicIOSessionManager.java httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/impl/nio/pool/LeaseRequest.java httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/impl/nio/pool/SessionPool.java httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/nio/conn/IOSessionManager.java Modified: httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/impl/nio/client/DefaultAsyncRequestDirector.java URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/impl/nio/client/DefaultAsyncRequestDirector.java?rev=1042785&r1=1042784&r2=1042785&view=diff ============================================================================== --- httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/impl/nio/client/DefaultAsyncRequestDirector.java (original) +++ httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/impl/nio/client/DefaultAsyncRequestDirector.java Mon Dec 6 20:43:40 2010 @@ -29,6 +29,7 @@ package org.apache.http.impl.nio.client; import java.io.IOException; import java.nio.channels.SelectionKey; import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; import org.apache.http.HttpException; import org.apache.http.HttpHost; @@ -80,7 +81,8 @@ class DefaultAsyncRequestDirector imp this.params = params; HttpRoute route = new HttpRoute(handler.getTarget()); - this.sessionFuture = this.sessmrg.leaseSession(route, null, new InternalFutureCallback()); + this.sessionFuture = this.sessmrg.leaseSession( + route, null, 0, TimeUnit.MILLISECONDS, new InternalFutureCallback()); } public Future getResultFuture() { Modified: httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/impl/nio/conn/BasicIOSessionManager.java URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/impl/nio/conn/BasicIOSessionManager.java?rev=1042785&r1=1042784&r2=1042785&view=diff ============================================================================== --- httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/impl/nio/conn/BasicIOSessionManager.java (original) +++ httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/impl/nio/conn/BasicIOSessionManager.java Mon Dec 6 20:43:40 2010 @@ -27,6 +27,7 @@ package org.apache.http.impl.nio.conn; import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -58,6 +59,8 @@ public class BasicIOSessionManager imple public synchronized Future leaseSession( final HttpRoute route, final Object state, + final long connectTimeout, + final TimeUnit timeUnit, final FutureCallback callback) { if (this.log.isDebugEnabled()) { this.log.debug("I/O session request: route[" + route + "][state: " + state + "]"); @@ -68,7 +71,7 @@ public class BasicIOSessionManager imple } BasicFuture future = new BasicFuture( callback); - this.pool.lease(route, state, new InternalPoolEntryCallback(future)); + this.pool.lease(route, state, connectTimeout, timeUnit, new InternalPoolEntryCallback(future)); if (this.log.isDebugEnabled()) { if (!future.isDone()) { this.log.debug("I/O session could not be allocated immediately: " + Modified: httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/impl/nio/pool/LeaseRequest.java URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/impl/nio/pool/LeaseRequest.java?rev=1042785&r1=1042784&r2=1042785&view=diff ============================================================================== --- httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/impl/nio/pool/LeaseRequest.java (original) +++ httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/impl/nio/pool/LeaseRequest.java Mon Dec 6 20:43:40 2010 @@ -30,15 +30,18 @@ class LeaseRequest { private final T route; private final Object state; + private final int connectTimeout; private final PoolEntryCallback callback; public LeaseRequest( final T route, final Object state, + final int connectTimeout, final PoolEntryCallback callback) { super(); this.route = route; this.state = state; + this.connectTimeout = connectTimeout; this.callback = callback; } @@ -54,6 +57,10 @@ class LeaseRequest { return this.callback; } + public int getConnectTimeout() { + return this.connectTimeout; + } + @Override public String toString() { StringBuilder buffer = new StringBuilder(); Modified: httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/impl/nio/pool/SessionPool.java URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/impl/nio/pool/SessionPool.java?rev=1042785&r1=1042784&r2=1042785&view=diff ============================================================================== --- httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/impl/nio/pool/SessionPool.java (original) +++ httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/impl/nio/pool/SessionPool.java Mon Dec 6 20:43:40 2010 @@ -32,6 +32,7 @@ import java.util.LinkedList; import java.util.ListIterator; import java.util.Map; import java.util.Set; +import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; @@ -114,13 +115,21 @@ public class SessionPool { return pool; } - public void lease(final T route, final Object state, final PoolEntryCallback callback) { + public void lease( + final T route, final Object state, + final long connectTimeout, final TimeUnit timeUnit, + final PoolEntryCallback callback) { if (this.isShutDown) { throw new IllegalStateException("Session pool has been shut down"); } this.lock.lock(); try { - LeaseRequest request = new LeaseRequest(route, state, callback); + TimeUnit unit = timeUnit != null ? timeUnit : TimeUnit.MILLISECONDS; + int timeout = (int) unit.toMillis(connectTimeout); + if (timeout < 0) { + timeout = 0; + } + LeaseRequest request = new LeaseRequest(route, state, timeout, callback); this.leasingRequests.add(request); processPendingRequests(); @@ -166,6 +175,7 @@ public class SessionPool { T route = request.getRoute(); Object state = request.getState(); + int timeout = request.getConnectTimeout(); PoolEntryCallback callback = request.getCallback(); if (getAllocatedTotal() >= this.maxTotal) { @@ -200,6 +210,7 @@ public class SessionPool { this.routeResolver.resolveLocalAddress(route), route, this.sessionRequestCallback); + sessionRequest.setConnectTimeout(timeout); pool.addPending(sessionRequest, callback); } } Modified: httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/nio/conn/IOSessionManager.java URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/nio/conn/IOSessionManager.java?rev=1042785&r1=1042784&r2=1042785&view=diff ============================================================================== --- httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/nio/conn/IOSessionManager.java (original) +++ httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/nio/conn/IOSessionManager.java Mon Dec 6 20:43:40 2010 @@ -27,13 +27,16 @@ package org.apache.http.nio.conn; import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; import org.apache.http.nio.concurrent.FutureCallback; public interface IOSessionManager { Future leaseSession( - T route, Object state, FutureCallback callback); + T route, Object state, + long connectTimeout, TimeUnit timeUnit, + FutureCallback callback); void releaseSession(ManagedIOSession session);