diff --git a/client/src/main/java/org/asynchttpclient/netty/request/NettyRequestSender.java b/client/src/main/java/org/asynchttpclient/netty/request/NettyRequestSender.java index 7a97d19f9d..17a12cc864 100755 --- a/client/src/main/java/org/asynchttpclient/netty/request/NettyRequestSender.java +++ b/client/src/main/java/org/asynchttpclient/netty/request/NettyRequestSender.java @@ -322,7 +322,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 (Exception e) { LOGGER.error("Can't write request", e); @@ -335,7 +335,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.getTargetRequest()); @@ -348,7 +348,7 @@ private void scheduleTimeouts(NettyResponseFuture nettyResponseFuture) { int readTimeoutValue = config.getReadTimeout(); if (readTimeoutValue != -1 && readTimeoutValue < requestTimeoutInMs) { // no need to schedule a readTimeout if the requestTimeout happens first - Timeout readTimeout = newTimeout(new ReadTimeoutTimerTask(nettyResponseFuture, this, timeoutsHolder, requestTimeoutInMs, readTimeoutValue), readTimeoutValue); + Timeout readTimeout = newTimeout(new ReadTimeoutTimerTask(nettyResponseFuture, this, timeoutsHolder, requestTimeoutInMs, readTimeoutValue, httpRequest), readTimeoutValue); timeoutsHolder.readTimeout = readTimeout; } nettyResponseFuture.setTimeoutsHolder(timeoutsHolder); diff --git a/client/src/main/java/org/asynchttpclient/netty/timeout/ReadTimeoutTimerTask.java b/client/src/main/java/org/asynchttpclient/netty/timeout/ReadTimeoutTimerTask.java index 715afadf6b..f70d53bbe7 100755 --- a/client/src/main/java/org/asynchttpclient/netty/timeout/ReadTimeoutTimerTask.java +++ b/client/src/main/java/org/asynchttpclient/netty/timeout/ReadTimeoutTimerTask.java @@ -14,6 +14,8 @@ package org.asynchttpclient.netty.timeout; import static org.asynchttpclient.util.DateUtils.millisTime; + +import io.netty.handler.codec.http.HttpRequest; import io.netty.util.Timeout; import org.asynchttpclient.netty.NettyResponseFuture; @@ -23,6 +25,7 @@ public class ReadTimeoutTimerTask extends TimeoutTimerTask { private final long readTimeout; private final long requestTimeoutInstant; + private final HttpRequest httpRequest; public ReadTimeoutTimerTask(// NettyResponseFuture nettyResponseFuture,// @@ -30,8 +33,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 +66,12 @@ public void run(Timeout timeout) throws Exception { if (durationBeforeCurrentReadTimeout <= 0L) { // idleConnectTimeout 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