You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2013/10/13 14:17:47 UTC
svn commit: r1531674 - in
/httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client:
DefaultClientExchangeHandlerImpl.java MainClientExec.java
MinimalClientExchangeHandlerImpl.java
Author: olegk
Date: Sun Oct 13 12:17:47 2013
New Revision: 1531674
URL: http://svn.apache.org/r1531674
Log:
HTTPASYNC-56: Moved code requiring synchronization out of #connectionAllocated
Modified:
httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/DefaultClientExchangeHandlerImpl.java
httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/MainClientExec.java
httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/MinimalClientExchangeHandlerImpl.java
Modified: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/DefaultClientExchangeHandlerImpl.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/DefaultClientExchangeHandlerImpl.java?rev=1531674&r1=1531673&r2=1531674&view=diff
==============================================================================
--- httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/DefaultClientExchangeHandlerImpl.java (original)
+++ httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/DefaultClientExchangeHandlerImpl.java Sun Oct 13 12:17:47 2013
@@ -44,7 +44,6 @@ import org.apache.http.concurrent.BasicF
import org.apache.http.concurrent.Cancellable;
import org.apache.http.concurrent.FutureCallback;
import org.apache.http.conn.routing.HttpRoute;
-import org.apache.http.conn.routing.RouteTracker;
import org.apache.http.nio.ContentDecoder;
import org.apache.http.nio.ContentEncoder;
import org.apache.http.nio.IOControl;
@@ -54,7 +53,6 @@ import org.apache.http.nio.protocol.Http
import org.apache.http.nio.protocol.HttpAsyncRequestExecutor;
import org.apache.http.nio.protocol.HttpAsyncRequestProducer;
import org.apache.http.nio.protocol.HttpAsyncResponseConsumer;
-import org.apache.http.protocol.HttpCoreContext;
/**
* Default implementation of {@link HttpAsyncClientExchangeHandler}.
@@ -271,28 +269,16 @@ class DefaultClientExchangeHandlerImpl<T
this.log.debug("[exchange: " + this.state.getId() + "] Connection allocated: " + managedConn);
}
this.managedConn.set(managedConn);
- this.state.setValidDuration(0);
- this.state.setNonReusable();
if (this.closed.get()) {
releaseConnection();
return;
}
- this.localContext.setAttribute(HttpCoreContext.HTTP_CONNECTION, managedConn);
- this.state.setRouteEstablished(this.connmgr.isRouteComplete(managedConn));
- if (!this.state.isRouteEstablished()) {
- this.state.setRouteTracker(new RouteTracker(this.state.getRoute()));
- }
-
if (!managedConn.isOpen()) {
failed(new ConnectionClosedException("Connection closed"));
} else {
managedConn.getContext().setAttribute(HttpAsyncRequestExecutor.HTTP_HANDLER, this);
- final RequestConfig config = this.localContext.getRequestConfig();
- if (config.getSocketTimeout() > 0) {
- managedConn.setSocketTimeout(config.getSocketTimeout());
- }
managedConn.requestOutput();
}
} catch (final RuntimeException runex) {
@@ -328,6 +314,11 @@ class DefaultClientExchangeHandlerImpl<T
this.log.debug("[exchange: " + this.state.getId() + "] Request connection for " +
this.state.getRoute());
}
+ this.state.setValidDuration(0);
+ this.state.setNonReusable();
+ this.state.setRouteEstablished(false);
+ this.state.setRouteTracker(null);
+
final HttpRoute route = this.state.getRoute();
final Object userToken = this.localContext.getUserToken();
final RequestConfig config = this.localContext.getRequestConfig();
Modified: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/MainClientExec.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/MainClientExec.java?rev=1531674&r1=1531673&r2=1531674&view=diff
==============================================================================
--- httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/MainClientExec.java (original)
+++ httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/MainClientExec.java Sun Oct 13 12:17:47 2013
@@ -77,6 +77,7 @@ import org.apache.http.nio.NHttpClientCo
import org.apache.http.nio.conn.NHttpClientConnectionManager;
import org.apache.http.nio.protocol.HttpAsyncRequestProducer;
import org.apache.http.nio.protocol.HttpAsyncResponseConsumer;
+import org.apache.http.protocol.HttpCoreContext;
import org.apache.http.protocol.HttpProcessor;
import org.apache.http.protocol.ImmutableHttpProcessor;
import org.apache.http.protocol.RequestTargetHost;
@@ -159,11 +160,18 @@ class MainClientExec implements Internal
final InternalState state,
final InternalConnManager connManager) throws IOException, HttpException {
final HttpClientContext localContext = state.getLocalContext();
- final HttpAsyncRequestProducer requestProducer = state.getRequestProducer();
final HttpRoute route = state.getRoute();
- final RouteTracker routeTracker = state.getRouteTracker();
final NHttpClientConnection managedConn = connManager.getConnection();
+ if (!state.isRouteEstablished() && state.getRouteTracker() == null) {
+ this.log.debug("Start connection routing");
+ state.setRouteEstablished(this.connmgr.isRouteComplete(managedConn));
+ if (!state.isRouteEstablished()) {
+ state.setRouteTracker(new RouteTracker(route));
+ }
+ }
+
if (!state.isRouteEstablished()) {
+ final RouteTracker routeTracker = state.getRouteTracker();
int step;
loop:
do {
@@ -216,6 +224,7 @@ class MainClientExec implements Internal
if (state.isRouteEstablished()) {
state.incrementExecCount();
if (state.getExecCount() > 1) {
+ final HttpAsyncRequestProducer requestProducer = state.getRequestProducer();
if (!requestProducer.isRepeatable() && state.isRequestContentProduced()) {
throw new NonRepeatableRequestException("Cannot retry request " +
"with a non-repeatable request entity.");
@@ -250,6 +259,12 @@ class MainClientExec implements Internal
this.authenticator.generateAuthResponse(currentRequest, proxyAuthState, localContext);
}
}
+
+ localContext.setAttribute(HttpCoreContext.HTTP_CONNECTION, managedConn);
+ final RequestConfig config = localContext.getRequestConfig();
+ if (config.getSocketTimeout() > 0) {
+ managedConn.setSocketTimeout(config.getSocketTimeout());
+ }
return currentRequest;
}
Modified: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/MinimalClientExchangeHandlerImpl.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/MinimalClientExchangeHandlerImpl.java?rev=1531674&r1=1531673&r2=1531674&view=diff
==============================================================================
--- httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/MinimalClientExchangeHandlerImpl.java (original)
+++ httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/MinimalClientExchangeHandlerImpl.java Sun Oct 13 12:17:47 2013
@@ -173,6 +173,11 @@ class MinimalClientExchangeHandlerImpl<T
this.connmgr.startRoute(localConn, this.route, this.localContext);
this.connmgr.routeComplete(localConn, this.route, this.localContext);
}
+ this.localContext.setAttribute(HttpCoreContext.HTTP_CONNECTION, localConn);
+ final RequestConfig config = this.localContext.getRequestConfig();
+ if (config.getSocketTimeout() > 0) {
+ localConn.setSocketTimeout(config.getSocketTimeout());
+ }
return this.request;
}
@@ -312,16 +317,10 @@ class MinimalClientExchangeHandlerImpl<T
return;
}
- this.localContext.setAttribute(HttpCoreContext.HTTP_CONNECTION, managedConn);
-
if (!managedConn.isOpen()) {
failed(new ConnectionClosedException("Connection closed"));
} else {
managedConn.getContext().setAttribute(HttpAsyncRequestExecutor.HTTP_HANDLER, this);
- final RequestConfig config = this.localContext.getRequestConfig();
- if (config.getSocketTimeout() > 0) {
- managedConn.setSocketTimeout(config.getSocketTimeout());
- }
managedConn.requestOutput();
}
} catch (final RuntimeException runex) {