Home / Function/ ChannelFuture() — netty Function Reference

ChannelFuture() — netty Function Reference

Architecture documentation for the ChannelFuture() function in Http2FrameWriterDataBenchmark.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  0791d501_8dec_ab00_6a1b_1a1805e56f9e["ChannelFuture()"]
  4df6ecc7_4589_1651_bd44_4cd5d0011fd8["OldDefaultHttp2FrameWriter"]
  0791d501_8dec_ab00_6a1b_1a1805e56f9e -->|defined in| 4df6ecc7_4589_1651_bd44_4cd5d0011fd8
  1c7370c4_c604_5d40_5979_39169e4dbcf6["DataFrameHeader()"]
  0791d501_8dec_ab00_6a1b_1a1805e56f9e -->|calls| 1c7370c4_c604_5d40_5979_39169e4dbcf6
  bc380697_dac6_22ad_7f28_26620f02fe36["paddingBytes()"]
  0791d501_8dec_ab00_6a1b_1a1805e56f9e -->|calls| bc380697_dac6_22ad_7f28_26620f02fe36
  b4a421ea_c751_7b9f_d674_8b2936b52696["release()"]
  0791d501_8dec_ab00_6a1b_1a1805e56f9e -->|calls| b4a421ea_c751_7b9f_d674_8b2936b52696
  style 0791d501_8dec_ab00_6a1b_1a1805e56f9e fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

microbench/src/main/java/io/netty/handler/codec/http2/Http2FrameWriterDataBenchmark.java lines 119–177

        @Override
        public ChannelFuture writeData(ChannelHandlerContext ctx, int streamId, ByteBuf data,
                                       int padding, boolean endStream, ChannelPromise promise) {
            final Http2CodecUtil.SimpleChannelPromiseAggregator promiseAggregator =
                    new Http2CodecUtil.SimpleChannelPromiseAggregator(promise, ctx.channel(), ctx.executor());
            final DataFrameHeader header = new DataFrameHeader(ctx, streamId);
            boolean needToReleaseHeaders = true;
            boolean needToReleaseData = true;
            try {
                checkPositive(streamId, "streamId");
                verifyPadding(padding);

                boolean lastFrame;
                int remainingData = data.readableBytes();
                do {
                    // Determine how much data and padding to write in this frame. Put all padding at the end.
                    int frameDataBytes = min(remainingData, maxFrameSize);
                    int framePaddingBytes = min(padding, max(0, (maxFrameSize - 1) - frameDataBytes));

                    // Decrement the remaining counters.
                    padding -= framePaddingBytes;
                    remainingData -= frameDataBytes;

                    // Determine whether or not this is the last frame to be sent.
                    lastFrame = remainingData == 0 && padding == 0;

                    // Only the last frame is not retained. Until then, the outer finally must release.
                    ByteBuf frameHeader = header.slice(frameDataBytes, framePaddingBytes, lastFrame && endStream);
                    needToReleaseHeaders = !lastFrame;
                    ctx.write(lastFrame ? frameHeader : frameHeader.retain(), promiseAggregator.newPromise());

                    // Write the frame data.
                    ByteBuf frameData = data.readSlice(frameDataBytes);
                    // Only the last frame is not retained. Until then, the outer finally must release.
                    needToReleaseData = !lastFrame;
                    ctx.write(lastFrame ? frameData : frameData.retain(), promiseAggregator.newPromise());

                    // Write the frame padding.
                    if (paddingBytes(framePaddingBytes) > 0) {
                        ctx.write(ZERO_BUFFER.slice(0, paddingBytes(framePaddingBytes)),
                                promiseAggregator.newPromise());
                    }
                } while (!lastFrame);
            } catch (Throwable t) {
                try {
                    if (needToReleaseHeaders) {
                        header.release();
                    }
                    if (needToReleaseData) {
                        data.release();
                    }
                } finally {
                    promiseAggregator.setFailure(t);
                    promiseAggregator.doneAllocatingPromises();
                }
                return promiseAggregator;
            }
            return promiseAggregator.doneAllocatingPromises();
        }

Domain

Subdomains

Frequently Asked Questions

What does ChannelFuture() do?
ChannelFuture() is a function in the netty codebase, defined in microbench/src/main/java/io/netty/handler/codec/http2/Http2FrameWriterDataBenchmark.java.
Where is ChannelFuture() defined?
ChannelFuture() is defined in microbench/src/main/java/io/netty/handler/codec/http2/Http2FrameWriterDataBenchmark.java at line 119.
What does ChannelFuture() call?
ChannelFuture() calls 3 function(s): DataFrameHeader, paddingBytes, release.

Analyze Your Own Codebase

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

Try Supermodel Free