WriteTimeoutHandler Class — netty Architecture
Architecture documentation for the WriteTimeoutHandler class in WriteTimeoutHandler.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD 7b2e459e_2db3_bea4_7583_d545431cfb47["WriteTimeoutHandler"] 2b552d7b_2e84_2905_efd6_2d637843dd63["WriteTimeoutHandler.java"] 7b2e459e_2db3_bea4_7583_d545431cfb47 -->|defined in| 2b552d7b_2e84_2905_efd6_2d637843dd63 ada7fb06_4273_e9d7_d037_92424a7f7cb8["WriteTimeoutHandler()"] 7b2e459e_2db3_bea4_7583_d545431cfb47 -->|method| ada7fb06_4273_e9d7_d037_92424a7f7cb8 7ed311c8_061c_9835_d304_df9aa39d3a34["write()"] 7b2e459e_2db3_bea4_7583_d545431cfb47 -->|method| 7ed311c8_061c_9835_d304_df9aa39d3a34 4f267b1a_7e0e_daab_c3f0_697a0a5e5135["handlerRemoved()"] 7b2e459e_2db3_bea4_7583_d545431cfb47 -->|method| 4f267b1a_7e0e_daab_c3f0_697a0a5e5135 2b53a7eb_61bd_a249_aad8_257450c6dd22["scheduleTimeout()"] 7b2e459e_2db3_bea4_7583_d545431cfb47 -->|method| 2b53a7eb_61bd_a249_aad8_257450c6dd22 0db099ef_ff56_5d35_0390_5b916332e663["addWriteTimeoutTask()"] 7b2e459e_2db3_bea4_7583_d545431cfb47 -->|method| 0db099ef_ff56_5d35_0390_5b916332e663 a29cd7e7_658b_eddc_cda5_3a2f3771e34e["removeWriteTimeoutTask()"] 7b2e459e_2db3_bea4_7583_d545431cfb47 -->|method| a29cd7e7_658b_eddc_cda5_3a2f3771e34e 043f5eaa_2242_aa7e_eb93_13a5893c806d["writeTimedOut()"] 7b2e459e_2db3_bea4_7583_d545431cfb47 -->|method| 043f5eaa_2242_aa7e_eb93_13a5893c806d
Relationship Graph
Source Code
handler/src/main/java/io/netty/handler/timeout/WriteTimeoutHandler.java lines 66–236
public class WriteTimeoutHandler extends ChannelOutboundHandlerAdapter {
private static final long MIN_TIMEOUT_NANOS = TimeUnit.MILLISECONDS.toNanos(1);
private final long timeoutNanos;
/**
* A doubly-linked list to track all WriteTimeoutTasks
*/
private WriteTimeoutTask lastTask;
private boolean closed;
/**
* Creates a new instance.
*
* @param timeoutSeconds
* write timeout in seconds
*/
public WriteTimeoutHandler(int timeoutSeconds) {
this(timeoutSeconds, TimeUnit.SECONDS);
}
/**
* Creates a new instance.
*
* @param timeout
* write timeout
* @param unit
* the {@link TimeUnit} of {@code timeout}
*/
public WriteTimeoutHandler(long timeout, TimeUnit unit) {
ObjectUtil.checkNotNull(unit, "unit");
if (timeout <= 0) {
timeoutNanos = 0;
} else {
timeoutNanos = Math.max(unit.toNanos(timeout), MIN_TIMEOUT_NANOS);
}
}
@Override
public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception {
if (timeoutNanos > 0) {
promise = promise.unvoid();
scheduleTimeout(ctx, promise);
}
ctx.write(msg, promise);
}
@Override
public void handlerRemoved(ChannelHandlerContext ctx) throws Exception {
assert ctx.executor().inEventLoop();
WriteTimeoutTask task = lastTask;
lastTask = null;
while (task != null) {
assert task.ctx.executor().inEventLoop();
task.scheduledFuture.cancel(false);
WriteTimeoutTask prev = task.prev;
task.prev = null;
task.next = null;
task = prev;
}
}
private void scheduleTimeout(final ChannelHandlerContext ctx, final ChannelPromise promise) {
// Schedule a timeout.
final WriteTimeoutTask task = new WriteTimeoutTask(ctx, promise);
task.scheduledFuture = ctx.executor().schedule(task, timeoutNanos, TimeUnit.NANOSECONDS);
if (!task.scheduledFuture.isDone()) {
addWriteTimeoutTask(task);
// Cancel the scheduled timeout if the flush promise is complete.
promise.addListener(task);
}
}
private void addWriteTimeoutTask(WriteTimeoutTask task) {
assert task.ctx.executor().inEventLoop();
if (lastTask != null) {
lastTask.next = task;
Source
Frequently Asked Questions
What is the WriteTimeoutHandler class?
WriteTimeoutHandler is a class in the netty codebase, defined in handler/src/main/java/io/netty/handler/timeout/WriteTimeoutHandler.java.
Where is WriteTimeoutHandler defined?
WriteTimeoutHandler is defined in handler/src/main/java/io/netty/handler/timeout/WriteTimeoutHandler.java at line 66.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free