in tchannel-core/src/main/java/com/uber/tchannel/handlers/ResponseRouter.java [160:183]
protected void setTimer(final @NotNull OutRequest<?> outRequest) {
final long start = System.currentTimeMillis();
Timeout timeout = timer.newTimeout(new TimerTask() {
@Override
public void run(Timeout timeout) throws Exception {
// prevent ByteBuf refCnt leak
outRequest.flushWrite();
if (timeouts.incrementAndGet() >= resetOnTimeoutLimit) {
// reset on continuous timeouts
peerManager.handleConnectionErrors(ctx.channel(),
new TChannelConnectionReset(String.format(
"Connection reset due to continuous %d timeouts", resetOnTimeoutLimit)));
return;
}
handleResponse(new ErrorResponse(
outRequest.getRequest().getId(),
ErrorType.Timeout,
String.format("Request timeout after %dms", System.currentTimeMillis() - start)));
}
}, outRequest.getRequest().getTimeout(), TimeUnit.MILLISECONDS);
outRequest.setTimeout(timeout);
}