class RequestTimeoutTimerTask extends TimeoutTimerTask {

    private final long requestTimeout;

    RequestTimeoutTimerTask(NettyResponseFuture<?> nettyResponseFuture,
                            NettyRequestSender requestSender,
                            TimeoutsHolder timeoutsHolder,
                            long requestTimeout) {
        super(nettyResponseFuture, requestSender, timeoutsHolder);
        this.requestTimeout = requestTimeout;
    }

    @Override
    public void run(Timeout timeout) {<FILL_FUNCTION_BODY>}
}

        if (done.getAndSet(true) || requestSender.isClosed()) {
            return;
        }

        // in any case, cancel possible readTimeout sibling
        timeoutsHolder.cancel();

        if (nettyResponseFuture.isDone()) {
            return;
        }

        StringBuilder sb = StringBuilderPool.DEFAULT.stringBuilder().append("Request timeout to ");
        appendRemoteAddress(sb);
        String message = sb.append(" after ").append(requestTimeout).append(" ms").toString();
        long age = unpreciseMillisTime() - nettyResponseFuture.getStart();
        expire(message, age);
    
<methods>public void clean() <variables>private static final Logger LOGGER,protected final java.util.concurrent.atomic.AtomicBoolean done,volatile NettyResponseFuture<?> nettyResponseFuture,protected final non-sealed org.asynchttpclient.netty.request.NettyRequestSender requestSender,final non-sealed org.asynchttpclient.netty.timeout.TimeoutsHolder timeoutsHolder