diff --git a/src/main/java/com/ning/http/client/providers/netty/request/NettyRequestSender.java b/src/main/java/com/ning/http/client/providers/netty/request/NettyRequestSender.java index de7dfe9469..5c0382b34a 100644 --- a/src/main/java/com/ning/http/client/providers/netty/request/NettyRequestSender.java +++ b/src/main/java/com/ning/http/client/providers/netty/request/NettyRequestSender.java @@ -338,7 +338,7 @@ public void writeRequest(NettyResponseFuture future, Channel channel) { // don't bother scheduling timeouts if channel became invalid if (Channels.isChannelValid(channel)) - scheduleTimeouts(future); + scheduleTimeouts(httpRequest, future); } catch (Throwable t) { LOGGER.error("Can't write request", t); @@ -386,7 +386,7 @@ private void configureTransferAdapter(AsyncHandler handler, HttpRequest httpR TransferCompletionHandler.class.cast(handler).headers(h); } - private void scheduleTimeouts(NettyResponseFuture nettyResponseFuture) { + private void scheduleTimeouts(HttpRequest httpRequest, NettyResponseFuture nettyResponseFuture) { nettyResponseFuture.touch(); int requestTimeoutInMs = requestTimeout(config, nettyResponseFuture.getRequest()); @@ -401,7 +401,7 @@ private void scheduleTimeouts(NettyResponseFuture nettyResponseFuture) { if (readTimeoutValue != -1 && readTimeoutValue < requestTimeoutInMs) { // no need for a readTimeout that's less than the requestTimeout Timeout readTimeout = newTimeout(new ReadTimeoutTimerTask(nettyResponseFuture, this, timeoutsHolder, - requestTimeoutInMs, readTimeoutValue), readTimeoutValue); + requestTimeoutInMs, readTimeoutValue, httpRequest), readTimeoutValue); timeoutsHolder.readTimeout = readTimeout; } nettyResponseFuture.setTimeoutsHolder(timeoutsHolder); diff --git a/src/main/java/com/ning/http/client/providers/netty/request/timeout/ReadTimeoutTimerTask.java b/src/main/java/com/ning/http/client/providers/netty/request/timeout/ReadTimeoutTimerTask.java index cb0678ba7a..d9e2b09d36 100644 --- a/src/main/java/com/ning/http/client/providers/netty/request/timeout/ReadTimeoutTimerTask.java +++ b/src/main/java/com/ning/http/client/providers/netty/request/timeout/ReadTimeoutTimerTask.java @@ -14,6 +14,7 @@ import static com.ning.http.util.DateUtils.millisTime; +import org.jboss.netty.handler.codec.http.HttpRequest; import org.jboss.netty.util.Timeout; import com.ning.http.client.providers.netty.future.NettyResponseFuture; @@ -23,6 +24,7 @@ public class ReadTimeoutTimerTask extends TimeoutTimerTask { private final long readTimeout; private final long requestTimeoutInstant; + private final HttpRequest httpRequest; public ReadTimeoutTimerTask(// NettyResponseFuture nettyResponseFuture,// @@ -30,8 +32,19 @@ public ReadTimeoutTimerTask(// TimeoutsHolder timeoutsHolder,// long requestTimeout,// long readTimeout) { + this(nettyResponseFuture, requestSender, timeoutsHolder, requestTimeout, readTimeout, null); + } + + public ReadTimeoutTimerTask(// + NettyResponseFuture nettyResponseFuture,// + NettyRequestSender requestSender,// + TimeoutsHolder timeoutsHolder,// + long requestTimeout,// + long readTimeout,// + HttpRequest httpRequest) { super(nettyResponseFuture, requestSender, timeoutsHolder); this.readTimeout = readTimeout; + this.httpRequest = httpRequest; requestTimeoutInstant = requestTimeout >= 0 ? nettyResponseFuture.getStart() + requestTimeout : Long.MAX_VALUE; } @@ -52,7 +65,12 @@ public void run(Timeout timeout) throws Exception { if (durationBeforeCurrentReadTimeout <= 0L) { // readTimeout reached - String message = "Read timeout to " + remoteAddress + " of " + readTimeout + " ms"; + String message; + if (httpRequest == null) { + message = "Read timeout to " + remoteAddress + " of " + readTimeout + " ms"; + } else { + message = "Read timeout to " + httpRequest.getUri() + " of " + readTimeout + " ms"; + } long durationSinceLastTouch = now - nettyResponseFuture.getLastTouch(); expire(message, durationSinceLastTouch); // cancel request timeout sibling