Class BufferingFlowControlStrategy
- java.lang.Object
-
- org.eclipse.jetty.http2.AbstractFlowControlStrategy
-
- org.eclipse.jetty.http2.BufferingFlowControlStrategy
-
- All Implemented Interfaces:
FlowControlStrategy,org.eclipse.jetty.util.component.Dumpable
@ManagedObject public class BufferingFlowControlStrategy extends AbstractFlowControlStrategy
A flow control strategy that accumulates updates and emits window control frames when the accumulated value reaches a threshold.
The sender flow control window is represented in the receiver as two buckets: a bigger bucket, initially full, that is drained when data is received, and a smaller bucket, initially empty, that is filled when data is consumed. Only the smaller bucket can refill the bigger bucket.
The smaller bucket is defined as a fraction of the bigger bucket.
For a more visual representation, see the rocking bamboo fountain, where the bamboo is the smaller bucket and the pool is the bigger bucket.
The algorithm works in this way.
The initial bigger bucket (BB) capacity is 100, and let's imagine the smaller bucket (SB) being 40% of the bigger bucket: 40.
The receiver receives a data frame of 60, so now BB=40; the data frame is passed to the application that consumes 25, so now SB=25. Since SB is not full, no window control frames are emitted.
The application consumes other 20, so now SB=45. Since SB is full, its 45 are transferred to BB, which is now BB=85, and a window control frame is sent with delta=45.
The application consumes the remaining 15, so now SB=15, and no window control frame is emitted.
The
bufferRatiocontrols how often the window control frame is emitted.A
bufferRatio=0.0means that a window control frame is emitted every time the application consumes a data frame. This may result in too many window control frames be emitted, but may allow the sender to avoid stalling.A
bufferRatio=1.0means that a window control frame is emitted only when the application has consumed a whole window. This minimizes the number of window control frames emitted, but may cause the sender to stall, waiting for the window control frame.The default value is
bufferRatio=0.5.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.Dumpable
org.eclipse.jetty.util.component.Dumpable.DumpableContainer
-
Nested classes/interfaces inherited from interface org.eclipse.jetty.http2.FlowControlStrategy
FlowControlStrategy.Factory
-
-
Field Summary
-
Fields inherited from class org.eclipse.jetty.http2.AbstractFlowControlStrategy
LOG
-
Fields inherited from interface org.eclipse.jetty.http2.FlowControlStrategy
DEFAULT_WINDOW_SIZE
-
-
Constructor Summary
Constructors Constructor Description BufferingFlowControlStrategy(float bufferRatio)BufferingFlowControlStrategy(int initialStreamSendWindow, float bufferRatio)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description floatgetBufferRatio()voidonDataConsumed(ISession session, IStream stream, int length)voidonStreamCreated(IStream stream)voidonStreamDestroyed(IStream stream)protected voidsendWindowUpdate(IStream stream, ISession session, WindowUpdateFrame frame)voidsetBufferRatio(float bufferRatio)java.lang.StringtoString()voidwindowUpdate(ISession session, IStream stream, WindowUpdateFrame frame)-
Methods inherited from class org.eclipse.jetty.http2.AbstractFlowControlStrategy
dump, dump, getInitialStreamRecvWindow, getInitialStreamSendWindow, getSessionStallTime, getStreamsStallTime, onDataReceived, onDataSending, onDataSent, onSessionStalled, onSessionUnstalled, onStreamStalled, onStreamUnstalled, onWindowUpdate, reset, updateInitialStreamWindow
-
-
-
-
Method Detail
-
getBufferRatio
@ManagedAttribute("The ratio between the receive buffer and the consume buffer") public float getBufferRatio()
-
setBufferRatio
public void setBufferRatio(float bufferRatio)
-
onStreamCreated
public void onStreamCreated(IStream stream)
- Specified by:
onStreamCreatedin interfaceFlowControlStrategy- Overrides:
onStreamCreatedin classAbstractFlowControlStrategy
-
onStreamDestroyed
public void onStreamDestroyed(IStream stream)
- Specified by:
onStreamDestroyedin interfaceFlowControlStrategy- Overrides:
onStreamDestroyedin classAbstractFlowControlStrategy
-
sendWindowUpdate
protected void sendWindowUpdate(IStream stream, ISession session, WindowUpdateFrame frame)
-
windowUpdate
public void windowUpdate(ISession session, IStream stream, WindowUpdateFrame frame)
- Specified by:
windowUpdatein interfaceFlowControlStrategy- Overrides:
windowUpdatein classAbstractFlowControlStrategy
-
toString
public java.lang.String toString()
- Overrides:
toStringin classjava.lang.Object
-
-