Package io.netty.handler.codec.http2
Class UniformStreamByteDistributor
java.lang.Object
io.netty.handler.codec.http2.UniformStreamByteDistributor
- All Implemented Interfaces:
StreamByteDistributor
@UnstableApi
public final class UniformStreamByteDistributor
extends Object
implements StreamByteDistributor
A
StreamByteDistributor
that ignores stream priority and uniformly allocates bytes to all
streams. This class uses a minimum chunk size that will be allocated to each stream. While
fewer streams may be written to in each call to distribute(int, Writer)
, doing this
should improve the goodput on each written stream.-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate final class
The remote flow control state for a single stream.Nested classes/interfaces inherited from interface io.netty.handler.codec.http2.StreamByteDistributor
StreamByteDistributor.StreamState, StreamByteDistributor.Writer
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate int
The minimum number of bytes that we will attempt to allocate to a stream.private final Deque
<UniformStreamByteDistributor.State> private final Http2Connection.PropertyKey
private long
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionboolean
distribute
(int maxBytes, StreamByteDistributor.Writer writer) Distributes up tomaxBytes
to those streams containing streamable bytes and iterates across those streams to write the appropriate bytes.void
minAllocationChunk
(int minAllocationChunk) Sets the minimum allocation chunk that will be allocated to each stream.state
(Http2Stream stream) void
updateDependencyTree
(int childStreamId, int parentStreamId, short weight, boolean exclusive) Explicitly update the dependency tree.void
updateStreamableBytes
(StreamByteDistributor.StreamState streamState) Called when the streamable bytes for a stream has changed.
-
Field Details
-
stateKey
-
queue
-
minAllocationChunk
private int minAllocationChunkThe minimum number of bytes that we will attempt to allocate to a stream. This is to help improve goodput on a per-stream basis. -
totalStreamableBytes
private long totalStreamableBytes
-
-
Constructor Details
-
UniformStreamByteDistributor
-
-
Method Details
-
minAllocationChunk
public void minAllocationChunk(int minAllocationChunk) Sets the minimum allocation chunk that will be allocated to each stream. Defaults to 1KiB.- Parameters:
minAllocationChunk
- the minimum number of bytes that will be allocated to each stream. Must be > 0.
-
updateStreamableBytes
Description copied from interface:StreamByteDistributor
Called when the streamable bytes for a stream has changed. Until this method is called for the first time for a give stream, the stream is assumed to have no streamable bytes.- Specified by:
updateStreamableBytes
in interfaceStreamByteDistributor
-
updateDependencyTree
public void updateDependencyTree(int childStreamId, int parentStreamId, short weight, boolean exclusive) Description copied from interface:StreamByteDistributor
Explicitly update the dependency tree. This method is called independently of stream state changes.- Specified by:
updateDependencyTree
in interfaceStreamByteDistributor
- Parameters:
childStreamId
- The stream identifier associated with the child stream.parentStreamId
- The stream identifier associated with the parent stream. May be0
, to makechildStreamId
and immediate child of the connection.weight
- The weight which is used relative to other child streams forparentStreamId
. This value must be between 1 and 256 (inclusive).exclusive
- IfchildStreamId
should be the exclusive dependency ofparentStreamId
.
-
distribute
Description copied from interface:StreamByteDistributor
Distributes up tomaxBytes
to those streams containing streamable bytes and iterates across those streams to write the appropriate bytes. Criteria for traversing streams is undefined and it is up to the implementation to determine when to stop at a given stream.The streamable bytes are not automatically updated by calling this method. It is up to the caller to indicate the number of bytes streamable after the write by calling
StreamByteDistributor.updateStreamableBytes(StreamState)
.- Specified by:
distribute
in interfaceStreamByteDistributor
- Parameters:
maxBytes
- the maximum number of bytes to write.- Returns:
true
if there are still streamable bytes that have not yet been written, otherwisefalse
.- Throws:
Http2Exception
- If an internal exception occurs and internal connection state would otherwise be corrupted.
-
state
-