Class AbstractTrafficShapingHandler
- All Implemented Interfaces:
ChannelDownstreamHandler,ChannelHandler,ChannelUpstreamHandler,ExternalResourceReleasable
- 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 too 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.
An ObjectSizeEstimator can be passed at construction to specify what
is the size of the object to be read or write accordingly to the type of
object. If not specified, it will used the DefaultObjectSizeEstimator implementation.
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 ClassesModifier and TypeClassDescriptionstatic classFor simple ChannelBuffer, returns the readableBytes, else use standard DefaultObjectSizeEstimator.Nested classes/interfaces inherited from interface org.jboss.netty.channel.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 TimerTimer associated to any TrafficCounterprotected TrafficCounterTraffic Counter -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedAbstractTrafficShapingHandler(ObjectSizeEstimator objectSizeEstimator, Timer timer) protectedAbstractTrafficShapingHandler(ObjectSizeEstimator objectSizeEstimator, Timer timer, long checkInterval) Constructor using the specified ObjectSizeEstimator and using NO LIMIT and default max time as delay allowed value of 15000L ms.protectedAbstractTrafficShapingHandler(ObjectSizeEstimator objectSizeEstimator, Timer timer, long writeLimit, long readLimit) protectedAbstractTrafficShapingHandler(ObjectSizeEstimator objectSizeEstimator, Timer timer, long writeLimit, long readLimit, long checkInterval) Constructor using the specified ObjectSizeEstimator and default max time as delay allowed value of 15000L ms.protectedAbstractTrafficShapingHandler(ObjectSizeEstimator objectSizeEstimator, Timer timer, long writeLimit, long readLimit, long checkInterval, long maxTime) Constructor using the specified ObjectSizeEstimator.protectedConstructor using defaultObjectSizeEstimatorand using NO LIMIT and default Check Interval value of 1000L ms and default max time as delay allowed value of 15000L ms.protectedAbstractTrafficShapingHandler(Timer timer, long checkInterval) Constructor using defaultObjectSizeEstimatorand using NO LIMIT and default max time as delay allowed value of 15000L ms.protectedAbstractTrafficShapingHandler(Timer timer, long writeLimit, long readLimit) Constructor using defaultObjectSizeEstimatorand using default Check Interval value of 1000L ms and default max time as delay allowed value of 15000L ms.protectedAbstractTrafficShapingHandler(Timer timer, long writeLimit, long readLimit, long checkInterval) Constructor using defaultObjectSizeEstimatorand default max time as delay allowed value of 15000L ms.protectedAbstractTrafficShapingHandler(Timer timer, long writeLimit, long readLimit, long checkInterval, long maxTime) Constructor using defaultObjectSizeEstimator. -
Method Summary
Modifier and TypeMethodDescriptionprotected longcalculateSize(Object obj) voidInvoked when aChannelis open, bound to a local address, and connected to a remote address.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.longlonglonglonglonglongprotected voidDeprecated.voidmessageReceived(ChannelHandlerContext ctx, MessageEvent evt) Invoked when a message object (e.g:ChannelBuffer) was received from a remote peer.voidReleases the external resources that this object depends on.voidsetCheckInterval(long newCheckInterval) 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 the change will be taken as best effort, meaning that all already scheduled traffics will not be changed, but only applied to new traffics.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, MessageEvent evt, long delay) Deprecated.toString()voidwriteRequested(ChannelHandlerContext ctx, MessageEvent evt) Invoked whenChannel.write(Object)is called.Methods inherited from class org.jboss.netty.channel.SimpleChannelHandler
bindRequested, channelBound, channelClosed, channelDisconnected, channelInterestChanged, channelOpen, channelUnbound, childChannelClosed, childChannelOpen, closeRequested, connectRequested, disconnectRequested, exceptionCaught, handleDownstream, handleUpstream, setInterestOpsRequested, unbindRequested, writeComplete
-
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 -
timer
Timer associated to any TrafficCounter -
checkInterval
protected volatile long checkIntervalDelay between two performance snapshots -
maxTime
protected volatile long maxTimeMax delay in wait
-
-
Constructor Details
-
AbstractTrafficShapingHandler
protected AbstractTrafficShapingHandler(Timer timer, long writeLimit, long readLimit, long checkInterval) Constructor using defaultObjectSizeEstimatorand default max time as delay allowed value of 15000L ms.- Parameters:
timer- created once for instance like HashedWheelTimer(10, TimeUnit.MILLISECONDS, 1024).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
protected AbstractTrafficShapingHandler(ObjectSizeEstimator objectSizeEstimator, Timer timer, long writeLimit, long readLimit, long checkInterval) Constructor using the specified ObjectSizeEstimator and default max time as delay allowed value of 15000L ms.- Parameters:
objectSizeEstimator- theObjectSizeEstimatorthat will be used to compute the size of the message.timer- created once for instance like HashedWheelTimer(10, TimeUnit.MILLISECONDS, 1024).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
Constructor using defaultObjectSizeEstimatorand using default Check Interval value of 1000L ms and default max time as delay allowed value of 15000L ms.- Parameters:
timer- created once for instance like HashedWheelTimer(10, TimeUnit.MILLISECONDS, 1024).writeLimit- 0 or a limit in bytes/sreadLimit- 0 or a limit in bytes/s
-
AbstractTrafficShapingHandler
protected AbstractTrafficShapingHandler(ObjectSizeEstimator objectSizeEstimator, Timer timer, long writeLimit, long readLimit) Constructor using the specified ObjectSizeEstimator and using default Check Interval value of 1000L ms and default max time as delay allowed value of 15000L ms.- Parameters:
objectSizeEstimator- theObjectSizeEstimatorthat will be used to compute the size of the message.timer- created once for instance like HashedWheelTimer(10, TimeUnit.MILLISECONDS, 1024).writeLimit- 0 or a limit in bytes/sreadLimit- 0 or a limit in bytes/s
-
AbstractTrafficShapingHandler
Constructor using defaultObjectSizeEstimatorand using NO LIMIT and default Check Interval value of 1000L ms and default max time as delay allowed value of 15000L ms.- Parameters:
timer- created once for instance like HashedWheelTimer(10, TimeUnit.MILLISECONDS, 1024).
-
AbstractTrafficShapingHandler
Constructor using the specified ObjectSizeEstimator and using NO LIMIT and default Check Interval value of 1000L ms and default max time as delay allowed value of 15000L ms.- Parameters:
objectSizeEstimator- theObjectSizeEstimatorthat will be used to compute the size of the message.timer- created once for instance like HashedWheelTimer(10, TimeUnit.MILLISECONDS, 1024).
-
AbstractTrafficShapingHandler
Constructor using defaultObjectSizeEstimatorand using NO LIMIT and default max time as delay allowed value of 15000L ms.- Parameters:
timer- created once for instance like HashedWheelTimer(10, TimeUnit.MILLISECONDS, 1024).checkInterval- The delay between two computations of performances for channels or 0 if no stats are to be computed.
-
AbstractTrafficShapingHandler
protected AbstractTrafficShapingHandler(ObjectSizeEstimator objectSizeEstimator, Timer timer, long checkInterval) Constructor using the specified ObjectSizeEstimator and using NO LIMIT and default max time as delay allowed value of 15000L ms.- Parameters:
objectSizeEstimator- theObjectSizeEstimatorthat will be used to compute the size of the message.timer- created once for instance like HashedWheelTimer(10, TimeUnit.MILLISECONDS, 1024).checkInterval- The delay between two computations of performances for channels or 0 if no stats are to be computed.
-
AbstractTrafficShapingHandler
protected AbstractTrafficShapingHandler(Timer timer, long writeLimit, long readLimit, long checkInterval, long maxTime) Constructor using defaultObjectSizeEstimator.- Parameters:
timer- created once for instance like HashedWheelTimer(10, TimeUnit.MILLISECONDS, 1024).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 max time to wait in case of excess of traffic (to prevent Time Out event). Must be positive.
-
AbstractTrafficShapingHandler
protected AbstractTrafficShapingHandler(ObjectSizeEstimator objectSizeEstimator, Timer timer, long writeLimit, long readLimit, long checkInterval, long maxTime) Constructor using the specified ObjectSizeEstimator.- Parameters:
objectSizeEstimator- theObjectSizeEstimatorthat will be used to compute the size of the message.timer- created once for instance like HashedWheelTimer(10, TimeUnit.MILLISECONDS, 1024).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 max time to wait in case of excess of traffic (to prevent Time Out event). Must be positive.
-
-
Method Details
-
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. -
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 newCheckInterval) - Parameters:
newCheckInterval- the checkInterval to set
-
getMaxTimeWait
public long getMaxTimeWait()- Returns:
- the max delay on wait
-
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.
-
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 suspended is set. Must be positive.
-
getMaxWriteSize
public long getMaxWriteSize()- Returns:
- the maxWriteSize default being 4194304L bytes
-
setMaxWriteSize
public void setMaxWriteSize(long maxWriteSize) 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:
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
-
messageReceived
Description copied from class:SimpleChannelHandlerInvoked when a message object (e.g:ChannelBuffer) was received from a remote peer.- Overrides:
messageReceivedin classSimpleChannelHandler- Throws:
Exception
-
writeRequested
Description copied from class:SimpleChannelHandlerInvoked whenChannel.write(Object)is called.- Overrides:
writeRequestedin classSimpleChannelHandler- Throws:
Exception
-
internalSubmitWrite
@Deprecated protected void internalSubmitWrite(ChannelHandlerContext ctx, MessageEvent evt) throws Exception Deprecated.- Throws:
Exception
-
submitWrite
@Deprecated protected void submitWrite(ChannelHandlerContext ctx, MessageEvent evt, long delay) throws Exception Deprecated.- Throws:
Exception
-
getTrafficCounter
- Returns:
- the current TrafficCounter (if channel is still connected).
-
releaseExternalResources
public void releaseExternalResources()Description copied from interface:ExternalResourceReleasableReleases the external resources that this object depends on. You should not call this method if the external resources (e.g. thread pool) are in use by other objects.- Specified by:
releaseExternalResourcesin interfaceExternalResourceReleasable
-
channelConnected
Description copied from class:SimpleChannelHandlerInvoked when aChannelis open, bound to a local address, and connected to a remote address.- Overrides:
channelConnectedin classSimpleChannelHandler- Throws:
Exception
-
calculateSize
-
toString
-