Package io.netty.handler.codec.http2
Class DefaultHttp2RemoteFlowController.FlowState
java.lang.Object
io.netty.handler.codec.http2.DefaultHttp2RemoteFlowController.FlowState
- All Implemented Interfaces:
StreamByteDistributor.StreamState
- Enclosing class:
DefaultHttp2RemoteFlowController
private final class DefaultHttp2RemoteFlowController.FlowState
extends Object
implements StreamByteDistributor.StreamState
The remote flow control state for a single stream.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate boolean
Set to true if cancel() was called.private boolean
private long
private final Deque
<Http2RemoteFlowController.FlowControlled> private final Http2Stream
private int
private boolean
Set to true while a frame is being written, false otherwise. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescription(package private) void
cancel
(Http2Error error, Throwable cause) Clears the pending queue and writes errors for each remaining frame.private void
decrementFlowControlWindow
(int bytes) Decrement the per stream and connection flow control window bybytes
.private void
decrementPendingBytes
(int bytes, boolean updateStreamableBytes) If this frame is in the pending queue, decrements the number of pending bytes for the stream.(package private) void
Adds theframe
to the pending queue and increments the pending byte count.private void
boolean
hasFrame()
Indicates whether or not there are frames pending for this stream.private void
incrementPendingBytes
(int numBytes, boolean updateStreamableBytes) Increments the number of pending bytes for this node and optionally updates theStreamByteDistributor
.(package private) int
incrementStreamWindow
(int delta) Increments the flow control window for this stream by the given delta and returns the new value.(package private) boolean
Determine if the stream associated with this object is writable.(package private) boolean
Returns the parameter from the last call tomarkedWritability(boolean)
.(package private) void
markedWritability
(boolean isWritable) Save the state of writability.peek()
Returns the head of the pending queue, ornull
if empty.long
Get the amount of bytes this stream has pending to send.stream()
The stream this state is associated with.int
The size (in bytes) of the stream's flow control window.(package private) void
windowSize
(int initialWindowSize) Reset the window size for this stream.private int
Returns the maximum writable window (minimum of the stream and connection windows).(package private) int
writeAllocatedBytes
(int allocated) Write the allocated bytes for this stream.private void
writeError
(Http2RemoteFlowController.FlowControlled frame, Http2Exception cause) Discards thisHttp2RemoteFlowController.FlowControlled
, writing an error.
-
Field Details
-
stream
-
pendingWriteQueue
-
window
private int window -
pendingBytes
private long pendingBytes -
markedWritable
private boolean markedWritable -
writing
private boolean writingSet to true while a frame is being written, false otherwise. -
cancelled
private boolean cancelledSet to true if cancel() was called.
-
-
Constructor Details
-
FlowState
FlowState(Http2Stream stream)
-
-
Method Details
-
isWritable
boolean isWritable()Determine if the stream associated with this object is writable.- Returns:
true
if the stream associated with this object is writable.
-
stream
The stream this state is associated with.- Specified by:
stream
in interfaceStreamByteDistributor.StreamState
-
markedWritability
boolean markedWritability()Returns the parameter from the last call tomarkedWritability(boolean)
. -
markedWritability
void markedWritability(boolean isWritable) Save the state of writability. -
windowSize
public int windowSize()Description copied from interface:StreamByteDistributor.StreamState
The size (in bytes) of the stream's flow control window. The amount written must not exceed this amount!A
StreamByteDistributor
needs to know the stream's window size in order to avoid allocating bytes if the window size is negative. The window size being0
may also be significant to determine when if an stream has been given a chance to write an empty frame, and also enables optimizations like not writing empty frames in some situations (don't write headers until data can also be written).- Specified by:
windowSize
in interfaceStreamByteDistributor.StreamState
- Returns:
- the size of the stream's flow control window.
- See Also:
-
windowSize
void windowSize(int initialWindowSize) Reset the window size for this stream. -
writeAllocatedBytes
int writeAllocatedBytes(int allocated) Write the allocated bytes for this stream.- Returns:
- the number of bytes written for a stream or
-1
if no write occurred.
-
incrementStreamWindow
Increments the flow control window for this stream by the given delta and returns the new value.- Throws:
Http2Exception
-
writableWindow
private int writableWindow()Returns the maximum writable window (minimum of the stream and connection windows). -
pendingBytes
public long pendingBytes()Description copied from interface:StreamByteDistributor.StreamState
Get the amount of bytes this stream has pending to send. The actual amount written must not exceedStreamByteDistributor.StreamState.windowSize()
!- Specified by:
pendingBytes
in interfaceStreamByteDistributor.StreamState
- Returns:
- The amount of bytes this stream has pending to send.
- See Also:
-
enqueueFrame
Adds theframe
to the pending queue and increments the pending byte count. -
enqueueFrameWithoutMerge
-
hasFrame
public boolean hasFrame()Description copied from interface:StreamByteDistributor.StreamState
Indicates whether or not there are frames pending for this stream.- Specified by:
hasFrame
in interfaceStreamByteDistributor.StreamState
-
peek
Returns the head of the pending queue, ornull
if empty. -
cancel
Clears the pending queue and writes errors for each remaining frame.- Parameters:
error
- theHttp2Error
to use.cause
- theThrowable
that caused this method to be invoked.
-
incrementPendingBytes
private void incrementPendingBytes(int numBytes, boolean updateStreamableBytes) Increments the number of pending bytes for this node and optionally updates theStreamByteDistributor
. -
decrementPendingBytes
private void decrementPendingBytes(int bytes, boolean updateStreamableBytes) If this frame is in the pending queue, decrements the number of pending bytes for the stream. -
decrementFlowControlWindow
private void decrementFlowControlWindow(int bytes) Decrement the per stream and connection flow control window bybytes
. -
writeError
Discards thisHttp2RemoteFlowController.FlowControlled
, writing an error. If this frame is in the pending queue, the unwritten bytes are removed from this branch of the priority tree.
-