net.tomp2p.utils
Class AbstractTrafficShapingHandler

java.lang.Object
  extended by org.jboss.netty.channel.SimpleChannelHandler
      extended by net.tomp2p.utils.AbstractTrafficShapingHandler
All Implemented Interfaces:
org.jboss.netty.channel.ChannelDownstreamHandler, org.jboss.netty.channel.ChannelHandler, org.jboss.netty.channel.ChannelUpstreamHandler, org.jboss.netty.util.ExternalResourceReleasable

public abstract class AbstractTrafficShapingHandler
extends org.jboss.netty.channel.SimpleChannelHandler
implements org.jboss.netty.util.ExternalResourceReleasable

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:

Version:
$Rev$, $Date$
Author:
The Netty Project (netty-dev@lists.jboss.org), Frederic Bregier

Nested Class Summary
 
Nested classes/interfaces inherited from interface org.jboss.netty.channel.ChannelHandler
org.jboss.netty.channel.ChannelHandler.Sharable
 
Field Summary
protected  long checkInterval
          Delay between two performance snapshots
static long DEFAULT_CHECK_INTERVAL
          Default delay between two checks: 1s
protected  Executor executor
          Executor to associated to any TrafficCounter
protected  TrafficCounter trafficCounter
          Traffic Counter
 
Constructor Summary
AbstractTrafficShapingHandler(Executor executor)
          Constructor using default ObjectSizeEstimator and using NO LIMIT and default Check Interval
AbstractTrafficShapingHandler(Executor executor, long checkInterval)
          Constructor using default ObjectSizeEstimator and using NO LIMIT
AbstractTrafficShapingHandler(Executor executor, long writeLimit, long readLimit)
          Constructor using default ObjectSizeEstimator and using default Check Interval
AbstractTrafficShapingHandler(Executor executor, long writeLimit, long readLimit, long checkInterval)
          Constructor using default ObjectSizeEstimator
AbstractTrafficShapingHandler(org.jboss.netty.util.ObjectSizeEstimator objectSizeEstimator, Executor executor)
          Constructor using the specified ObjectSizeEstimator and using NO LIMIT and default Check Interval
AbstractTrafficShapingHandler(org.jboss.netty.util.ObjectSizeEstimator objectSizeEstimator, Executor executor, long checkInterval)
          Constructor using the specified ObjectSizeEstimator and using NO LIMIT
AbstractTrafficShapingHandler(org.jboss.netty.util.ObjectSizeEstimator objectSizeEstimator, Executor executor, long writeLimit, long readLimit)
          Constructor using the specified ObjectSizeEstimator and using default Check Interval
AbstractTrafficShapingHandler(org.jboss.netty.util.ObjectSizeEstimator objectSizeEstimator, Executor executor, long writeLimit, long readLimit, long checkInterval)
          Constructor using the specified ObjectSizeEstimator
 
Method Summary
 void configure(long newCheckInterval)
          Change the check interval.
 void configure(long newWriteLimit, long newReadLimit)
          Change the underlying limitations.
 void configure(long newWriteLimit, long newReadLimit, long newCheckInterval)
          Change the underlying limitations and check interval.
protected  void doAccounting(TrafficCounter counter)
          Called each time the accounting is computed from the TrafficCounters.
 TrafficCounter getTrafficCounter()
           
 void handleDownstream(org.jboss.netty.channel.ChannelHandlerContext ctx, org.jboss.netty.channel.ChannelEvent e)
           
 boolean hasLimit()
           
 void messageReceived(org.jboss.netty.channel.ChannelHandlerContext arg0, org.jboss.netty.channel.MessageEvent arg1)
           
 void releaseExternalResources()
           
 String toString()
           
 void writeRequested(org.jboss.netty.channel.ChannelHandlerContext arg0, org.jboss.netty.channel.MessageEvent arg1)
           
 
Methods inherited from class org.jboss.netty.channel.SimpleChannelHandler
bindRequested, channelBound, channelClosed, channelConnected, channelDisconnected, channelInterestChanged, channelOpen, channelUnbound, childChannelClosed, childChannelOpen, closeRequested, connectRequested, disconnectRequested, exceptionCaught, handleUpstream, setInterestOpsRequested, unbindRequested, writeComplete
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

DEFAULT_CHECK_INTERVAL

public static final long DEFAULT_CHECK_INTERVAL
Default delay between two checks: 1s

See Also:
Constant Field Values

trafficCounter

protected TrafficCounter trafficCounter
Traffic Counter


executor

protected Executor executor
Executor to associated to any TrafficCounter


checkInterval

protected long checkInterval
Delay between two performance snapshots

Constructor Detail

AbstractTrafficShapingHandler

public AbstractTrafficShapingHandler(Executor executor,
                                     long writeLimit,
                                     long readLimit,
                                     long checkInterval)
Constructor using default ObjectSizeEstimator

Parameters:
executor - created for instance like Executors.newCachedThreadPool
writeLimit - 0 or a limit in bytes/s
readLimit - 0 or a limit in bytes/s
checkInterval - The delay between two computations of performances for channels or 0 if no stats are to be computed

AbstractTrafficShapingHandler

public AbstractTrafficShapingHandler(org.jboss.netty.util.ObjectSizeEstimator objectSizeEstimator,
                                     Executor executor,
                                     long writeLimit,
                                     long readLimit,
                                     long checkInterval)
Constructor using the specified ObjectSizeEstimator

Parameters:
objectSizeEstimator - the ObjectSizeEstimator that will be used to compute the size of the message
executor - created for instance like Executors.newCachedThreadPool
writeLimit - 0 or a limit in bytes/s
readLimit - 0 or a limit in bytes/s
checkInterval - The delay between two computations of performances for channels or 0 if no stats are to be computed

AbstractTrafficShapingHandler

public AbstractTrafficShapingHandler(Executor executor,
                                     long writeLimit,
                                     long readLimit)
Constructor using default ObjectSizeEstimator and using default Check Interval

Parameters:
executor - created for instance like Executors.newCachedThreadPool
writeLimit - 0 or a limit in bytes/s
readLimit - 0 or a limit in bytes/s

AbstractTrafficShapingHandler

public AbstractTrafficShapingHandler(org.jboss.netty.util.ObjectSizeEstimator objectSizeEstimator,
                                     Executor executor,
                                     long writeLimit,
                                     long readLimit)
Constructor using the specified ObjectSizeEstimator and using default Check Interval

Parameters:
objectSizeEstimator - the ObjectSizeEstimator that will be used to compute the size of the message
executor - created for instance like Executors.newCachedThreadPool
writeLimit - 0 or a limit in bytes/s
readLimit - 0 or a limit in bytes/s

AbstractTrafficShapingHandler

public AbstractTrafficShapingHandler(Executor executor)
Constructor using default ObjectSizeEstimator and using NO LIMIT and default Check Interval

Parameters:
executor - created for instance like Executors.newCachedThreadPool

AbstractTrafficShapingHandler

public AbstractTrafficShapingHandler(org.jboss.netty.util.ObjectSizeEstimator objectSizeEstimator,
                                     Executor executor)
Constructor using the specified ObjectSizeEstimator and using NO LIMIT and default Check Interval

Parameters:
objectSizeEstimator - the ObjectSizeEstimator that will be used to compute the size of the message
executor - created for instance like Executors.newCachedThreadPool

AbstractTrafficShapingHandler

public AbstractTrafficShapingHandler(Executor executor,
                                     long checkInterval)
Constructor using default ObjectSizeEstimator and using NO LIMIT

Parameters:
executor - created for instance like Executors.newCachedThreadPool
checkInterval - The delay between two computations of performances for channels or 0 if no stats are to be computed

AbstractTrafficShapingHandler

public AbstractTrafficShapingHandler(org.jboss.netty.util.ObjectSizeEstimator objectSizeEstimator,
                                     Executor executor,
                                     long checkInterval)
Constructor using the specified ObjectSizeEstimator and using NO LIMIT

Parameters:
objectSizeEstimator - the ObjectSizeEstimator that will be used to compute the size of the message
executor - created for instance like Executors.newCachedThreadPool
checkInterval - The delay between two computations of performances for channels or 0 if no stats are to be computed
Method Detail

configure

public void configure(long newWriteLimit,
                      long newReadLimit,
                      long newCheckInterval)
Change the underlying limitations and check interval.

Parameters:
newWriteLimit -
newReadLimit -
newCheckInterval -

configure

public void configure(long newWriteLimit,
                      long newReadLimit)
Change the underlying limitations.

Parameters:
newWriteLimit -
newReadLimit -

configure

public void configure(long newCheckInterval)
Change the check interval.

Parameters:
newCheckInterval -

doAccounting

protected void doAccounting(TrafficCounter counter)
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

public void messageReceived(org.jboss.netty.channel.ChannelHandlerContext arg0,
                            org.jboss.netty.channel.MessageEvent arg1)
                     throws Exception
Overrides:
messageReceived in class org.jboss.netty.channel.SimpleChannelHandler
Throws:
Exception

writeRequested

public void writeRequested(org.jboss.netty.channel.ChannelHandlerContext arg0,
                           org.jboss.netty.channel.MessageEvent arg1)
                    throws Exception
Overrides:
writeRequested in class org.jboss.netty.channel.SimpleChannelHandler
Throws:
Exception

handleDownstream

public void handleDownstream(org.jboss.netty.channel.ChannelHandlerContext ctx,
                             org.jboss.netty.channel.ChannelEvent e)
                      throws Exception
Specified by:
handleDownstream in interface org.jboss.netty.channel.ChannelDownstreamHandler
Overrides:
handleDownstream in class org.jboss.netty.channel.SimpleChannelHandler
Throws:
Exception

getTrafficCounter

public TrafficCounter getTrafficCounter()
Returns:
the current TrafficCounter (if channel is still connected)

releaseExternalResources

public void releaseExternalResources()
Specified by:
releaseExternalResources in interface org.jboss.netty.util.ExternalResourceReleasable

toString

public String toString()
Overrides:
toString in class Object

hasLimit

public boolean hasLimit()


Copyright © 2012. All Rights Reserved.