Skip to content

Commit b5a8541

Browse files
twz123slandelle
authored andcommitted
Make read timeout overridable on a per-request basis. (#1318)
1 parent e21781b commit b5a8541

File tree

4 files changed

+27
-2
lines changed

4 files changed

+27
-2
lines changed

Diff for: client/src/main/java/org/asynchttpclient/DefaultRequest.java

+8
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ public class DefaultRequest implements Request {
5656
private final File file;
5757
private final Boolean followRedirect;
5858
private final int requestTimeout;
59+
private final int readTimeout;
5960
private final long rangeOffset;
6061
private final Charset charset;
6162
private final ChannelPoolPartitioning channelPoolPartitioning;
@@ -83,6 +84,7 @@ public DefaultRequest(String method,//
8384
File file,//
8485
Boolean followRedirect,//
8586
int requestTimeout,//
87+
int readTimeout,//
8688
long rangeOffset,//
8789
Charset charset,//
8890
ChannelPoolPartitioning channelPoolPartitioning,//
@@ -107,6 +109,7 @@ public DefaultRequest(String method,//
107109
this.file = file;
108110
this.followRedirect = followRedirect;
109111
this.requestTimeout = requestTimeout;
112+
this.readTimeout = readTimeout;
110113
this.rangeOffset = rangeOffset;
111114
this.charset = charset;
112115
this.channelPoolPartitioning = channelPoolPartitioning;
@@ -218,6 +221,11 @@ public int getRequestTimeout() {
218221
return requestTimeout;
219222
}
220223

224+
@Override
225+
public int getReadTimeout() {
226+
return readTimeout;
227+
}
228+
221229
@Override
222230
public long getRangeOffset() {
223231
return rangeOffset;

Diff for: client/src/main/java/org/asynchttpclient/Request.java

+5
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,11 @@ public interface Request {
158158
*/
159159
int getRequestTimeout();
160160

161+
/**
162+
* @return the read timeout. Non zero values means "override config value".
163+
*/
164+
int getReadTimeout();
165+
161166
/**
162167
* @return the range header value, or 0 is not set.
163168
*/

Diff for: client/src/main/java/org/asynchttpclient/RequestBuilderBase.java

+7
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ public abstract class RequestBuilderBase<T extends RequestBuilderBase<T>> {
8686
protected File file;
8787
protected Boolean followRedirect;
8888
protected int requestTimeout;
89+
protected int readTimeout;
8990
protected long rangeOffset;
9091
protected Charset charset;
9192
protected ChannelPoolPartitioning channelPoolPartitioning = ChannelPoolPartitioning.PerHostChannelPoolPartitioning.INSTANCE;
@@ -481,6 +482,11 @@ public T setRequestTimeout(int requestTimeout) {
481482
return asDerivedType();
482483
}
483484

485+
public T setReadTimeout(int readTimeout) {
486+
this.readTimeout = readTimeout;
487+
return asDerivedType();
488+
}
489+
484490
public T setRangeOffset(long rangeOffset) {
485491
this.rangeOffset = rangeOffset;
486492
return asDerivedType();
@@ -621,6 +627,7 @@ public Request build() {
621627
rb.file,//
622628
rb.followRedirect,//
623629
rb.requestTimeout,//
630+
rb.readTimeout,//
624631
rb.rangeOffset,//
625632
finalCharset,//
626633
rb.channelPoolPartitioning,//

Diff for: client/src/main/java/org/asynchttpclient/netty/timeout/TimeoutsHolder.java

+7-2
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import java.util.concurrent.atomic.AtomicBoolean;
2424

2525
import org.asynchttpclient.AsyncHttpClientConfig;
26+
import org.asynchttpclient.Request;
2627
import org.asynchttpclient.netty.NettyResponseFuture;
2728
import org.asynchttpclient.netty.request.NettyRequestSender;
2829

@@ -44,9 +45,13 @@ public TimeoutsHolder(Timer nettyTimer, NettyResponseFuture<?> nettyResponseFutu
4445
this.nettyTimer = nettyTimer;
4546
this.nettyResponseFuture = nettyResponseFuture;
4647
this.requestSender = requestSender;
47-
this.readTimeoutValue = config.getReadTimeout();
4848

49-
int requestTimeoutInMs = nettyResponseFuture.getTargetRequest().getRequestTimeout();
49+
final Request targetRequest = nettyResponseFuture.getTargetRequest();
50+
51+
final int readTimeoutInMs = targetRequest.getReadTimeout();
52+
this.readTimeoutValue = readTimeoutInMs == 0 ? config.getReadTimeout() : readTimeoutInMs;
53+
54+
int requestTimeoutInMs = targetRequest.getRequestTimeout();
5055
if (requestTimeoutInMs == 0) {
5156
requestTimeoutInMs = config.getRequestTimeout();
5257
}

0 commit comments

Comments
 (0)