Home / Function/ write() — netty Function Reference

write() — netty Function Reference

Architecture documentation for the write() function in GlobalChannelTrafficShapingHandler.java from the netty codebase.

Function java Buffer Allocators calls 2 called by 3

Entity Profile

Dependency Diagram

graph TD
  95f889b3_eae3_1bd8_4f15_602c55f0e60f["write()"]
  70857fc2_a134_e299_7b48_1738d53c0016["GlobalChannelTrafficShapingHandler"]
  95f889b3_eae3_1bd8_4f15_602c55f0e60f -->|defined in| 70857fc2_a134_e299_7b48_1738d53c0016
  706081ef_7d7c_bb2e_f6ca_38466de329e4["handlerRemoved()"]
  706081ef_7d7c_bb2e_f6ca_38466de329e4 -->|calls| 95f889b3_eae3_1bd8_4f15_602c55f0e60f
  e0808444_5985_0d26_adac_0697fe4d503a["submitWrite()"]
  e0808444_5985_0d26_adac_0697fe4d503a -->|calls| 95f889b3_eae3_1bd8_4f15_602c55f0e60f
  fdc8520e_a0b7_8af9_c2a9_1cedfe7a5952["sendAllValid()"]
  fdc8520e_a0b7_8af9_c2a9_1cedfe7a5952 -->|calls| 95f889b3_eae3_1bd8_4f15_602c55f0e60f
  69a96252_28cc_c201_a07c_016f54efb94c["computeBalancedWait()"]
  95f889b3_eae3_1bd8_4f15_602c55f0e60f -->|calls| 69a96252_28cc_c201_a07c_016f54efb94c
  e0808444_5985_0d26_adac_0697fe4d503a["submitWrite()"]
  95f889b3_eae3_1bd8_4f15_602c55f0e60f -->|calls| e0808444_5985_0d26_adac_0697fe4d503a
  style 95f889b3_eae3_1bd8_4f15_602c55f0e60f fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

handler/src/main/java/io/netty/handler/traffic/GlobalChannelTrafficShapingHandler.java lines 650–691

    @Override
    public void write(final ChannelHandlerContext ctx, final Object msg, final ChannelPromise promise)
            throws Exception {
        long size = calculateSize(msg);
        long now = TrafficCounter.milliSecondFromNano();
        if (size > 0) {
            // compute the number of ms to wait before continue with the channel
            long waitGlobal = trafficCounter.writeTimeToWait(size, getWriteLimit(), maxTime, now);
            Integer key = ctx.channel().hashCode();
            PerChannel perChannel = channelQueues.get(key);
            long wait = 0;
            if (perChannel != null) {
                wait = perChannel.channelTrafficCounter.writeTimeToWait(size, writeChannelLimit, maxTime, now);
                if (writeDeviationActive) {
                    // now try to balance between the channels
                    long maxLocalWrite;
                    maxLocalWrite = perChannel.channelTrafficCounter.cumulativeWrittenBytes();
                    long maxGlobalWrite = cumulativeWrittenBytes.get();
                    if (maxLocalWrite <= 0) {
                        maxLocalWrite = 0;
                    }
                    if (maxGlobalWrite < maxLocalWrite) {
                        maxGlobalWrite = maxLocalWrite;
                    }
                    wait = computeBalancedWait(maxLocalWrite, maxGlobalWrite, wait);
                }
            }
            if (wait < waitGlobal) {
                wait = waitGlobal;
            }
            if (wait >= MINIMAL_WAIT) {
                if (logger.isDebugEnabled()) {
                    logger.debug("Write suspend: " + wait + ':' + ctx.channel().config().isAutoRead() + ':'
                            + isHandlerActive(ctx));
                }
                submitWrite(ctx, msg, size, wait, now, promise);
                return;
            }
        }
        // to maintain order of write
        submitWrite(ctx, msg, size, 0, now, promise);
    }

Domain

Subdomains

Frequently Asked Questions

What does write() do?
write() is a function in the netty codebase, defined in handler/src/main/java/io/netty/handler/traffic/GlobalChannelTrafficShapingHandler.java.
Where is write() defined?
write() is defined in handler/src/main/java/io/netty/handler/traffic/GlobalChannelTrafficShapingHandler.java at line 650.
What does write() call?
write() calls 2 function(s): computeBalancedWait, submitWrite.
What calls write()?
write() is called by 3 function(s): handlerRemoved, sendAllValid, submitWrite.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free