org.apache.catalina.cluster.tcp
Class FastAsyncSocketSender

java.lang.Object
  extended byorg.apache.catalina.cluster.tcp.DataSender
      extended byorg.apache.catalina.cluster.tcp.FastAsyncSocketSender
All Implemented Interfaces:
IDataSender

public class FastAsyncSocketSender
extends DataSender

Send cluster messages from a Message queue with only one socket. Ack and keep Alive Handling is supported. Fast Queue can limit queue size and consume all messages at queue at one block.
Limit the queue lock contention under high load!

FIXME: refactor code duplications with AsyncSocketSender => configurable or extract super class

Since:
5.5.9
Version:
$Id: FastAsyncSocketSender.java 939539 2010-04-30 01:31:33Z kkolinko $
Author:
Peter Rossbach ( idea comes form Rainer Jung)

Field Summary
 
Fields inherited from class org.apache.catalina.cluster.tcp.DataSender
connectCounter, createTime, dataFailureCounter, dataResendCounter, disconnectCounter, doProcessingStats, doWaitAckStats, keepAliveConnectTime, keepAliveCount, maxProcessingTime, maxWaitAckTime, minProcessingTime, minWaitAckTime, missingAckCounter, nrOfRequests, processingTime, sm, totalBytes, waitAckTime
 
Constructor Summary
FastAsyncSocketSender(java.lang.String domain, java.net.InetAddress host, int port)
          start background thread to push incomming cluster messages to replication node
 
Method Summary
protected  void checkThread()
          Start Queue thread as daemon
 void connect()
          Connect to socket and start background thread to push queued messages
 void disconnect()
          Disconnect socket ad stop queue thread
 java.lang.String getInfo()
          Return descriptive information about this implementation and the corresponding version number, in the format <description>/<version>.
 long getInQueueCounter()
           
 int getMaxQueueLength()
           
 long getOutQueueCounter()
           
 long getQueueAddWaitTime()
           
 long getQueueAddWaitTimeout()
          get current add wait timeout
 long getQueuedNrOfBytes()
           
 long getQueueRemoveWaitTime()
           
 long getQueueRemoveWaitTimeout()
          get current remove wait timeout
 int getQueueSize()
           
 int getRecoverCounter()
          get current push message recover counter
 long getRecoverTimeout()
          get current push message recover timeout
 int getThreadPriority()
          Get the current threadPriority
 boolean isQueueCheckLock()
           
 boolean isQueueDoStats()
           
 boolean isQueueTimeWait()
           
 void resetStatistics()
          Reset sender statistics
 void sendMessage(ClusterData data)
          Send message to queue for later sending.
 void setMaxQueueLength(int length)
           
 void setQueueAddWaitTimeout(long timeout)
          Set add wait timeout (default 10000 msec)
 void setQueueCheckLock(boolean checkLock)
           
 void setQueueDoStats(boolean doStats)
           
 void setQueueTimeWait(boolean timeWait)
           
 void setRecoverCounter(int counter)
          Set recover couner (default 5 )
 void setRecoverTimeout(long timeout)
          Set recover timeout (default 5000 msec)
 void setRemoveWaitTimeout(long timeout)
          set remove wait timeout ( default 30000 msec)
 void setThreadPriority(int threadPriority)
          change active the queue Thread priority
protected  void stopThread()
          stop queue worker thread
 java.lang.String toString()
          Name of this SockerSender
 
Methods inherited from class org.apache.catalina.cluster.tcp.DataSender
addProcessingStats, addStats, addWaitAckStats, checkKeepAlive, closeSocket, createSocket, getAckTimeout, getAddress, getAvgMessageSize, getAvgProcessingTime, getAvgWaitAckTime, getConnectCounter, getCreateTime, getDataFailureCounter, getDataResendCounter, getDisconnectCounter, getDomain, getKeepAliveConnectTime, getKeepAliveCount, getKeepAliveMaxRequestCount, getKeepAliveTimeout, getMaxProcessingTime, getMaxWaitAckTime, getMinProcessingTime, getMinWaitAckTime, getMissingAckCounter, getNrOfRequests, getPort, getProcessingTime, getRxBufSize, getSenderState, getSocket, getSocketCloseCounter, getSocketOpenCounter, getSocketOpenFailureCounter, getSoLingerTime, getSoTrafficClass, getSuspect, getTimeout, getTotalBytes, getTxBufSize, getWaitAckTime, isConnected, isDoProcessingStats, isDoWaitAckStats, isMessageTransferStarted, isOoBInline, isResend, isSoKeepAlive, isSoLingerOn, isSoReuseAddress, isSuspect, isTcpNoDelay, isWaitForAck, openSocket, pushMessage, setAckTimeout, setAddress, setDomain, setDoProcessingStats, setDoWaitAckStats, setKeepAliveMaxRequestCount, setKeepAliveTimeout, setOoBInline, setPort, setResend, setRxBufSize, setSocket, setSocketConnected, setSoKeepAlive, setSoLingerOn, setSoLingerTime, setSoReuseAddress, setSoTrafficClass, setSuspect, setTcpNoDelay, setTimeout, setTxBufSize, setWaitForAck, waitForAck, writeData
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

FastAsyncSocketSender

public FastAsyncSocketSender(java.lang.String domain,
                             java.net.InetAddress host,
                             int port)
start background thread to push incomming cluster messages to replication node

Parameters:
domain - replication cluster domain (session domain)
host - replication node tcp address
port - replication node tcp port
Method Detail

getInfo

public java.lang.String getInfo()
Return descriptive information about this implementation and the corresponding version number, in the format <description>/<version>.

Overrides:
getInfo in class DataSender

getQueueAddWaitTimeout

public long getQueueAddWaitTimeout()
get current add wait timeout

Returns:
current wait timeout

setQueueAddWaitTimeout

public void setQueueAddWaitTimeout(long timeout)
Set add wait timeout (default 10000 msec)

Parameters:
timeout -

getQueueRemoveWaitTimeout

public long getQueueRemoveWaitTimeout()
get current remove wait timeout

Returns:
The timeout

setRemoveWaitTimeout

public void setRemoveWaitTimeout(long timeout)
set remove wait timeout ( default 30000 msec)

Parameters:
timeout -

isQueueCheckLock

public boolean isQueueCheckLock()
Returns:
Returns the checkLock.

setQueueCheckLock

public void setQueueCheckLock(boolean checkLock)
Parameters:
checkLock - The checkLock to set.

isQueueDoStats

public boolean isQueueDoStats()
Returns:
Returns the doStats.

setQueueDoStats

public void setQueueDoStats(boolean doStats)
Parameters:
doStats - The doStats to set.

isQueueTimeWait

public boolean isQueueTimeWait()
Returns:
Returns the timeWait.

setQueueTimeWait

public void setQueueTimeWait(boolean timeWait)
Parameters:
timeWait - The timeWait to set.

getMaxQueueLength

public int getMaxQueueLength()
Returns:
Returns the inQueueCounter.

setMaxQueueLength

public void setMaxQueueLength(int length)
Parameters:
length - max queue length

getQueueAddWaitTime

public long getQueueAddWaitTime()
Returns:
Returns the add wait times.

getQueueRemoveWaitTime

public long getQueueRemoveWaitTime()
Returns:
Returns the add wait times.

getInQueueCounter

public long getInQueueCounter()
Returns:
Returns the inQueueCounter.

getOutQueueCounter

public long getOutQueueCounter()
Returns:
Returns the outQueueCounter.

getQueueSize

public int getQueueSize()
Returns:
Returns the queueSize.

getRecoverTimeout

public long getRecoverTimeout()
get current push message recover timeout

Returns:
current push message recover timeout

setRecoverTimeout

public void setRecoverTimeout(long timeout)
Set recover timeout (default 5000 msec)

Parameters:
timeout -

getRecoverCounter

public int getRecoverCounter()
get current push message recover counter

Returns:
current push message recover counter

setRecoverCounter

public void setRecoverCounter(int counter)
Set recover couner (default 5 )

Parameters:
counter -

setThreadPriority

public void setThreadPriority(int threadPriority)
change active the queue Thread priority

Parameters:
threadPriority - value must be between MIN and MAX Thread Priority
Throws:
java.lang.IllegalArgumentException

getThreadPriority

public int getThreadPriority()
Get the current threadPriority

Returns:
The thread priority

getQueuedNrOfBytes

public long getQueuedNrOfBytes()
Returns:
Returns the queuedNrOfBytes.

connect

public void connect()
             throws java.io.IOException
Connect to socket and start background thread to push queued messages

Specified by:
connect in interface IDataSender
Overrides:
connect in class DataSender
Throws:
java.io.IOException
See Also:
IDataSender.connect()

disconnect

public void disconnect()
Disconnect socket ad stop queue thread

Specified by:
disconnect in interface IDataSender
Overrides:
disconnect in class DataSender
See Also:
IDataSender.disconnect()

sendMessage

public void sendMessage(ClusterData data)
                 throws java.io.IOException
Send message to queue for later sending.

Specified by:
sendMessage in interface IDataSender
Overrides:
sendMessage in class DataSender
Throws:
java.io.IOException
See Also:
DataSender.pushMessage(ClusterData)

resetStatistics

public void resetStatistics()
Reset sender statistics

Overrides:
resetStatistics in class DataSender

toString

public java.lang.String toString()
Name of this SockerSender

Overrides:
toString in class DataSender

checkThread

protected void checkThread()
Start Queue thread as daemon


stopThread

protected void stopThread()
stop queue worker thread



Copyright © 2000-2012 Apache Software Foundation. All Rights Reserved.