Class AbstractTrafficShapingHandler
- All Implemented Interfaces:
ChannelHandler, ChannelInboundHandler, ChannelOutboundHandler
- Direct Known Subclasses:
ChannelTrafficShapingHandler, GlobalChannelTrafficShapingHandler, GlobalTrafficShapingHandler
AbstractTrafficShapingHandler allows to limit the global bandwidth
(see GlobalTrafficShapingHandler) or per session
bandwidth (see ChannelTrafficShapingHandler), as traffic shaping.
It allows you to implement an almost real time monitoring of the bandwidth using
the monitors from TrafficCounter that will call back every checkInterval
the method doAccounting of this handler.
If you want for any particular reasons to stop the monitoring (accounting) or to change the read/write limit or the check interval, several methods allow that for you:
- configure allows you to change read or write limits, or the checkInterval
- getTrafficCounter allows you to have access to the TrafficCounter and so to stop or start the monitoring, to change the checkInterval directly, or to have access to its values.
-
Nested Class Summary
Nested classes/interfaces inherited from interface ChannelHandler
ChannelHandler.Sharable -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected longDelay between two performance snapshotsstatic final longDefault delay between two checks: 1sstatic final longDefault max delay in case of traffic shaping (during which no communication will occur).protected longMax delay in waitprotected TrafficCounterTraffic Counter -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedprotectedAbstractTrafficShapingHandler(long checkInterval) Constructor using NO LIMIT and default max time as delay allowed value of 15000L ms.protectedAbstractTrafficShapingHandler(long writeLimit, long readLimit) protectedAbstractTrafficShapingHandler(long writeLimit, long readLimit, long checkInterval) Constructor using default max time as delay allowed value of 15000L ms.protectedAbstractTrafficShapingHandler(long writeLimit, long readLimit, long checkInterval, long maxTime) -
Method Summary
Modifier and TypeMethodDescriptionprotected longcalculateSize(Object msg) Calculate the size of the givenObject.voidchannelRead(ChannelHandlerContext ctx, Object msg) CallsChannelHandlerContext.fireChannelRead(Object)to forward to the nextChannelInboundHandlerin theChannelPipeline.voidCallsChannelHandlerContext.fireChannelRegistered()to forward to the nextChannelInboundHandlerin theChannelPipeline.voidconfigure(long newCheckInterval) Change the check interval.voidconfigure(long newWriteLimit, long newReadLimit) Change the underlying limitations.voidconfigure(long newWriteLimit, long newReadLimit, long newCheckInterval) Change the underlying limitations and check interval.protected voiddoAccounting(TrafficCounter counter) Called each time the accounting is computed from the TrafficCounters.longlonglonglonglonglongvoidDo nothing by default, sub-classes may override this method.protected static booleanvoidCallsChannelHandlerContext.read()to forward to the nextChannelOutboundHandlerin theChannelPipeline.voidsetCheckInterval(long checkInterval) voidsetMaxTimeWait(long maxTime) Note the change will be taken as best effort, meaning that all already scheduled traffics will not be changed, but only applied to new traffics.voidsetMaxWriteDelay(long maxWriteDelay) Note the change will be taken as best effort, meaning that all already scheduled traffics will not be changed, but only applied to new traffics.voidsetMaxWriteSize(long maxWriteSize) Note that this limit is a best effort on memory limitation to prevent Out Of Memory Exception.voidsetReadLimit(long readLimit) Note the change will be taken as best effort, meaning that all already scheduled traffics will not be changed, but only applied to new traffics.voidsetWriteLimit(long writeLimit) Note the change will be taken as best effort, meaning that all already scheduled traffics will not be changed, but only applied to new traffics.protected voidsubmitWrite(ChannelHandlerContext ctx, Object msg, long delay, ChannelPromise promise) Deprecated.toString()protected intvoidwrite(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) CallsChannelOutboundInvoker.write(Object, ChannelPromise)to forward to the nextChannelOutboundHandlerin theChannelPipeline.Methods inherited from class ChannelDuplexHandler
bind, close, connect, deregister, disconnect, flushMethods inherited from class ChannelInboundHandlerAdapter
channelActive, channelInactive, channelReadComplete, channelUnregistered, channelWritabilityChanged, exceptionCaught, userEventTriggeredMethods inherited from class ChannelHandlerAdapter
ensureNotSharable, handlerAdded, isSharableMethods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface ChannelHandler
handlerAdded
-
Field Details
-
DEFAULT_CHECK_INTERVAL
public static final long DEFAULT_CHECK_INTERVALDefault delay between two checks: 1s- See Also:
-
DEFAULT_MAX_TIME
public static final long DEFAULT_MAX_TIMEDefault max delay in case of traffic shaping (during which no communication will occur). Shall be less than TIMEOUT. Here half of "standard" 30s- See Also:
-
trafficCounter
Traffic Counter -
maxTime
protected volatile long maxTimeMax delay in wait -
checkInterval
protected volatile long checkIntervalDelay between two performance snapshots
-
-
Constructor Details
-
AbstractTrafficShapingHandler
protected AbstractTrafficShapingHandler(long writeLimit, long readLimit, long checkInterval, long maxTime) - Parameters:
writeLimit- 0 or a limit in bytes/sreadLimit- 0 or a limit in bytes/scheckInterval- The delay between two computations of performances for channels or 0 if no stats are to be computed.maxTime- The maximum delay to wait in case of traffic excess. Must be positive.
-
AbstractTrafficShapingHandler
protected AbstractTrafficShapingHandler(long writeLimit, long readLimit, long checkInterval) Constructor using default max time as delay allowed value of 15000L ms.- Parameters:
writeLimit- 0 or a limit in bytes/sreadLimit- 0 or a limit in bytes/scheckInterval- The delay between two computations of performances for channels or 0 if no stats are to be computed.
-
AbstractTrafficShapingHandler
-
AbstractTrafficShapingHandler
-
AbstractTrafficShapingHandler
protected AbstractTrafficShapingHandler(long checkInterval) Constructor using NO LIMIT and default max time as delay allowed value of 15000L ms.- Parameters:
checkInterval- The delay between two computations of performances for channels or 0 if no stats are to be computed.
-
-
Method Details
-
userDefinedWritabilityIndex
protected int userDefinedWritabilityIndex()- Returns:
- the index to be used by the TrafficShapingHandler to manage the user defined writability. For Channel TSH it is defined as 1, for Global TSH it is defined as 2, for GlobalChannel TSH it is defined as 3.
-
configure
public void configure(long newWriteLimit, long newReadLimit, long newCheckInterval) Change the underlying limitations and check interval.Note the change will be taken as best effort, meaning that all already scheduled traffics will not be changed, but only applied to new traffics.
So the expected usage of this method is to be used not too often, accordingly to the traffic shaping configuration.
- Parameters:
newWriteLimit- The new write limit (in bytes)newReadLimit- The new read limit (in bytes)newCheckInterval- The new check interval (in milliseconds)
-
configure
public void configure(long newWriteLimit, long newReadLimit) Change the underlying limitations.Note the change will be taken as best effort, meaning that all already scheduled traffics will not be changed, but only applied to new traffics.
So the expected usage of this method is to be used not too often, accordingly to the traffic shaping configuration.
- Parameters:
newWriteLimit- The new write limit (in bytes)newReadLimit- The new read limit (in bytes)
-
configure
public void configure(long newCheckInterval) Change the check interval.- Parameters:
newCheckInterval- The new check interval (in milliseconds)
-
getWriteLimit
public long getWriteLimit()- Returns:
- the writeLimit
-
setWriteLimit
public void setWriteLimit(long writeLimit) Note the change will be taken as best effort, meaning that all already scheduled traffics will not be changed, but only applied to new traffics.
So the expected usage of this method is to be used not too often, accordingly to the traffic shaping configuration.
- Parameters:
writeLimit- the writeLimit to set
-
getReadLimit
public long getReadLimit()- Returns:
- the readLimit
-
setReadLimit
public void setReadLimit(long readLimit) Note the change will be taken as best effort, meaning that all already scheduled traffics will not be changed, but only applied to new traffics.
So the expected usage of this method is to be used not too often, accordingly to the traffic shaping configuration.
- Parameters:
readLimit- the readLimit to set
-
getCheckInterval
public long getCheckInterval()- Returns:
- the checkInterval
-
setCheckInterval
public void setCheckInterval(long checkInterval) - Parameters:
checkInterval- the interval in ms between each step check to set, default value being 1000 ms.
-
setMaxTimeWait
public void setMaxTimeWait(long maxTime) Note the change will be taken as best effort, meaning that all already scheduled traffics will not be changed, but only applied to new traffics.
So the expected usage of this method is to be used not too often, accordingly to the traffic shaping configuration.
- Parameters:
maxTime- Max delay in wait, shall be less than TIME OUT in related protocol. Must be positive.
-
getMaxTimeWait
public long getMaxTimeWait()- Returns:
- the max delay in wait to prevent TIME OUT
-
getMaxWriteDelay
public long getMaxWriteDelay()- Returns:
- the maxWriteDelay
-
setMaxWriteDelay
public void setMaxWriteDelay(long maxWriteDelay) Note the change will be taken as best effort, meaning that all already scheduled traffics will not be changed, but only applied to new traffics.
So the expected usage of this method is to be used not too often, accordingly to the traffic shaping configuration.
- Parameters:
maxWriteDelay- the maximum Write Delay in ms in the buffer allowed before write suspension is set. Must be positive.
-
getMaxWriteSize
public long getMaxWriteSize()- Returns:
- the maxWriteSize default being 4194304L bytes.
-
setMaxWriteSize
public void setMaxWriteSize(long maxWriteSize) Note that this limit is a best effort on memory limitation to prevent Out Of Memory Exception. To ensure it works, the handler generating the write should use one of the way provided by Netty to handle the capacity:
- the
Channel.isWritable()property and the correspondingchannelWritabilityChanged()- the
ChannelFuture.addListener(new GenericFutureListener())- Parameters:
maxWriteSize- the maximum Write Size allowed in the buffer per channel before write suspended is set, default being 4194304L bytes.
-
doAccounting
Called each time the accounting is computed from the TrafficCounters. This method could be used for instance to implement almost real time accounting.- Parameters:
counter- the TrafficCounter that computes its performance
-
channelRead
Description copied from class:ChannelInboundHandlerAdapterCallsChannelHandlerContext.fireChannelRead(Object)to forward to the nextChannelInboundHandlerin theChannelPipeline. Sub-classes may override this method to change behavior.- Specified by:
channelReadin interfaceChannelInboundHandler- Overrides:
channelReadin classChannelInboundHandlerAdapter- Throws:
Exception
-
handlerRemoved
Description copied from class:ChannelHandlerAdapterDo nothing by default, sub-classes may override this method.- Specified by:
handlerRemovedin interfaceChannelHandler- Overrides:
handlerRemovedin classChannelHandlerAdapter- Throws:
Exception
-
isHandlerActive
-
read
Description copied from class:ChannelDuplexHandlerCallsChannelHandlerContext.read()to forward to the nextChannelOutboundHandlerin theChannelPipeline. Sub-classes may override this method to change behavior.- Specified by:
readin interfaceChannelOutboundHandler- Overrides:
readin classChannelDuplexHandler
-
write
Description copied from class:ChannelDuplexHandlerCallsChannelOutboundInvoker.write(Object, ChannelPromise)to forward to the nextChannelOutboundHandlerin theChannelPipeline. Sub-classes may override this method to change behavior.- Specified by:
writein interfaceChannelOutboundHandler- Overrides:
writein classChannelDuplexHandler- Parameters:
ctx- theChannelHandlerContextfor which the write operation is mademsg- the message to writepromise- theChannelPromiseto notify once the operation completes- Throws:
Exception- thrown if an error occurs
-
submitWrite
@Deprecated protected void submitWrite(ChannelHandlerContext ctx, Object msg, long delay, ChannelPromise promise) Deprecated. -
channelRegistered
Description copied from class:ChannelInboundHandlerAdapterCallsChannelHandlerContext.fireChannelRegistered()to forward to the nextChannelInboundHandlerin theChannelPipeline. Sub-classes may override this method to change behavior.- Specified by:
channelRegisteredin interfaceChannelInboundHandler- Overrides:
channelRegisteredin classChannelInboundHandlerAdapter- Throws:
Exception
-
trafficCounter
- Returns:
- the current TrafficCounter (if channel is still connected)
-
toString
-
calculateSize
Calculate the size of the givenObject. This implementation supportsByteBuf,ByteBufHolderandFileRegion. Sub-classes may override this.- Parameters:
msg- the msg for which the size should be calculated.- Returns:
- size the size of the msg or
-1if unknown.
-