WriteTask Class — netty Architecture
Architecture documentation for the WriteTask class in AbstractChannelHandlerContext.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD 5e541a04_978d_cf2e_cfd4_e2add246c7cf["WriteTask"] c58110f1_60ae_157d_f668_f5a6356af671["AbstractChannelHandlerContext.java"] 5e541a04_978d_cf2e_cfd4_e2add246c7cf -->|defined in| c58110f1_60ae_157d_f668_f5a6356af671 6c3e4aa6_2bb5_0dfe_9566_1e5707467753["WriteTask()"] 5e541a04_978d_cf2e_cfd4_e2add246c7cf -->|method| 6c3e4aa6_2bb5_0dfe_9566_1e5707467753 f49a7f61_b55c_10d0_a9f5_691a2c5eae69["init()"] 5e541a04_978d_cf2e_cfd4_e2add246c7cf -->|method| f49a7f61_b55c_10d0_a9f5_691a2c5eae69 133fbebe_10e6_a3e9_8036_d39de250d4cd["run()"] 5e541a04_978d_cf2e_cfd4_e2add246c7cf -->|method| 133fbebe_10e6_a3e9_8036_d39de250d4cd 72e73230_ce94_86e0_b594_16bff83940a3["cancel()"] 5e541a04_978d_cf2e_cfd4_e2add246c7cf -->|method| 72e73230_ce94_86e0_b594_16bff83940a3 4ced7ae1_b517_2cbc_95c4_ac69802062d0["decrementPendingOutboundBytes()"] 5e541a04_978d_cf2e_cfd4_e2add246c7cf -->|method| 4ced7ae1_b517_2cbc_95c4_ac69802062d0 9928f54e_595c_ba36_5f7a_466f283a0270["recycle()"] 5e541a04_978d_cf2e_cfd4_e2add246c7cf -->|method| 9928f54e_595c_ba36_5f7a_466f283a0270
Relationship Graph
Source Code
transport/src/main/java/io/netty/channel/AbstractChannelHandlerContext.java lines 1073–1153
static final class WriteTask implements Runnable {
private static final Recycler<WriteTask> RECYCLER = new Recycler<WriteTask>() {
@Override
protected WriteTask newObject(Handle<WriteTask> handle) {
return new WriteTask(handle);
}
};
static WriteTask newInstance(AbstractChannelHandlerContext ctx,
Object msg, ChannelPromise promise, boolean flush) {
WriteTask task = RECYCLER.get();
init(task, ctx, msg, promise, flush);
return task;
}
private static final boolean ESTIMATE_TASK_SIZE_ON_SUBMIT =
SystemPropertyUtil.getBoolean("io.netty.transport.estimateSizeOnSubmit", true);
// Assuming compressed oops, 12 bytes obj header, 4 ref fields and one int field
private static final int WRITE_TASK_OVERHEAD =
SystemPropertyUtil.getInt("io.netty.transport.writeTaskSizeOverhead", 32);
private final Handle<WriteTask> handle;
private AbstractChannelHandlerContext ctx;
private Object msg;
private ChannelPromise promise;
private int size; // sign bit controls flush
private WriteTask(Handle<WriteTask> handle) {
this.handle = handle;
}
static void init(WriteTask task, AbstractChannelHandlerContext ctx,
Object msg, ChannelPromise promise, boolean flush) {
task.ctx = ctx;
task.msg = msg;
task.promise = promise;
if (ESTIMATE_TASK_SIZE_ON_SUBMIT) {
task.size = ctx.pipeline.estimatorHandle().size(msg) + WRITE_TASK_OVERHEAD;
ctx.pipeline.incrementPendingOutboundBytes(task.size);
} else {
task.size = 0;
}
if (flush) {
task.size |= Integer.MIN_VALUE;
}
}
@Override
public void run() {
try {
decrementPendingOutboundBytes();
ctx.write(msg, size < 0, promise);
} finally {
recycle();
}
}
void cancel() {
try {
decrementPendingOutboundBytes();
} finally {
recycle();
}
}
private void decrementPendingOutboundBytes() {
if (ESTIMATE_TASK_SIZE_ON_SUBMIT) {
ctx.pipeline.decrementPendingOutboundBytes(size & Integer.MAX_VALUE);
}
}
private void recycle() {
// Set to null so the GC can collect them directly
ctx = null;
msg = null;
promise = null;
handle.recycle(this);
}
}
Source
Frequently Asked Questions
What is the WriteTask class?
WriteTask is a class in the netty codebase, defined in transport/src/main/java/io/netty/channel/AbstractChannelHandlerContext.java.
Where is WriteTask defined?
WriteTask is defined in transport/src/main/java/io/netty/channel/AbstractChannelHandlerContext.java at line 1073.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free