Apache Tomcat 7.0.28

org.apache.catalina.tribes.group.interceptors
Class TcpFailureDetector

java.lang.Object
  extended by org.apache.catalina.tribes.group.ChannelInterceptorBase
      extended by org.apache.catalina.tribes.group.interceptors.TcpFailureDetector
All Implemented Interfaces:
ChannelInterceptor, Heartbeat, MembershipListener

public class TcpFailureDetector
extends ChannelInterceptorBase

Title: A perfect failure detector

Description: The TcpFailureDetector is a useful interceptor that adds reliability to the membership layer.

If the network is busy, or the system is busy so that the membership receiver thread is not getting enough time to update its table, members can be "timed out" This failure detector will intercept the memberDisappeared message(unless its a true shutdown message) and connect to the member using TCP.

The TcpFailureDetector works in two ways.
1. It intercepts memberDisappeared events 2. It catches send errors

Version:
1.0
Author:
Filip Hanik

Nested Class Summary
 
Nested classes/interfaces inherited from interface org.apache.catalina.tribes.ChannelInterceptor
ChannelInterceptor.InterceptorEvent
 
Field Summary
protected  HashMap<Member,Long> addSuspects
           
protected  long connectTimeout
           
protected  Membership membership
           
protected  boolean performConnectTest
           
protected  boolean performReadTest
           
protected  boolean performSendTest
           
protected  long readTestTimeout
           
protected  HashMap<Member,Long> removeSuspects
           
protected static byte[] TCP_FAIL_DETECT
           
 
Fields inherited from class org.apache.catalina.tribes.group.ChannelInterceptorBase
optionFlag
 
Constructor Summary
TcpFailureDetector()
           
 
Method Summary
 void checkMembers(boolean checkAll)
           
 long getConnectTimeout()
           
 Member getLocalMember(boolean incAlive)
          Return the member that represents this node.
 Member getMember(Member mbr)
          Intercepts the code>Channel.getMember(Member) method
 Member[] getMembers()
          Get all current cluster members
 boolean getPerformConnectTest()
           
 boolean getPerformReadTest()
           
 boolean getPerformSendTest()
           
 long getReadTestTimeout()
           
 boolean hasMembers()
          has members
 void heartbeat()
          The heartbeat() method gets invoked periodically to allow interceptors to clean up resources, time out object and perform actions that are unrelated to sending/receiving data.
 void memberAdded(Member member)
          A member was added to the group
protected  boolean memberAlive(Member mbr)
           
protected static boolean memberAlive(Member mbr, byte[] msgData, boolean sendTest, boolean readTest, long readTimeout, long conTimeout, int optionFlag)
           
 void memberDisappeared(Member member)
          A member was removed from the group
If the member left voluntarily, the Member.getCommand will contain the Member.SHUTDOWN_PAYLOAD data
 void messageReceived(ChannelMessage msg)
          the messageReceived is invoked when a message is received.
protected  void performBasicCheck()
           
protected  void performForcedCheck()
           
 void sendMessage(Member[] destination, ChannelMessage msg, InterceptorPayload payload)
          The sendMessage method is called when a message is being sent to one more destinations.
 void setConnectTimeout(long connectTimeout)
           
 void setPerformConnectTest(boolean performConnectTest)
           
 void setPerformReadTest(boolean performReadTest)
           
 void setPerformSendTest(boolean performSendTest)
           
 void setReadTestTimeout(long readTestTimeout)
           
protected  void setupMembership()
           
 
Methods inherited from class org.apache.catalina.tribes.group.ChannelInterceptorBase
accept, fireInterceptorEvent, getNext, getOptionFlag, getPrevious, okToProcess, setNext, setOptionFlag, setPrevious, start, stop
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

TCP_FAIL_DETECT

protected static byte[] TCP_FAIL_DETECT

performConnectTest

protected boolean performConnectTest

connectTimeout

protected long connectTimeout

performSendTest

protected boolean performSendTest

performReadTest

protected boolean performReadTest

readTestTimeout

protected long readTestTimeout

membership

protected Membership membership

removeSuspects

protected HashMap<Member,Long> removeSuspects

addSuspects

protected HashMap<Member,Long> addSuspects
Constructor Detail

TcpFailureDetector

public TcpFailureDetector()
Method Detail

sendMessage

public void sendMessage(Member[] destination,
                        ChannelMessage msg,
                        InterceptorPayload payload)
                 throws ChannelException
Description copied from interface: ChannelInterceptor
The sendMessage method is called when a message is being sent to one more destinations. The interceptor can modify any of the parameters and then pass on the message down the stack by invoking getNext().sendMessage(destination,msg,payload)
Alternatively the interceptor can stop the message from being sent by not invoking getNext().sendMessage(destination,msg,payload)
If the message is to be sent asynchronous the application can be notified of completion and errors by passing in an error handler attached to a payload object.
The ChannelMessage.getAddress contains Channel.getLocalMember, and can be overwritten to simulate a message sent from another node.

Specified by:
sendMessage in interface ChannelInterceptor
Overrides:
sendMessage in class ChannelInterceptorBase
Parameters:
destination - Member[] - the destination for this message
msg - ChannelMessage - the message to be sent
payload - InterceptorPayload - the payload, carrying an error handler and future useful data, can be null
Throws:
ChannelException
See Also:
ErrorHandler, InterceptorPayload

messageReceived

public void messageReceived(ChannelMessage msg)
Description copied from interface: ChannelInterceptor
the messageReceived is invoked when a message is received. ChannelMessage.getAddress() is the sender, or the reply-to address if it has been overwritten.

Specified by:
messageReceived in interface ChannelInterceptor
Overrides:
messageReceived in class ChannelInterceptorBase
Parameters:
msg - ChannelMessage

memberAdded

public void memberAdded(Member member)
Description copied from interface: MembershipListener
A member was added to the group

Specified by:
memberAdded in interface MembershipListener
Overrides:
memberAdded in class ChannelInterceptorBase
Parameters:
member - Member - the member that was added

memberDisappeared

public void memberDisappeared(Member member)
Description copied from interface: MembershipListener
A member was removed from the group
If the member left voluntarily, the Member.getCommand will contain the Member.SHUTDOWN_PAYLOAD data

Specified by:
memberDisappeared in interface MembershipListener
Overrides:
memberDisappeared in class ChannelInterceptorBase
Parameters:
member - Member
See Also:
Member.SHUTDOWN_PAYLOAD

hasMembers

public boolean hasMembers()
Description copied from class: ChannelInterceptorBase
has members

Specified by:
hasMembers in interface ChannelInterceptor
Overrides:
hasMembers in class ChannelInterceptorBase
Returns:
boolean - if the channel has members in its membership group
See Also:
Channel.hasMembers()

getMembers

public Member[] getMembers()
Description copied from class: ChannelInterceptorBase
Get all current cluster members

Specified by:
getMembers in interface ChannelInterceptor
Overrides:
getMembers in class ChannelInterceptorBase
Returns:
all members or empty array
See Also:
Channel.getMembers()

getMember

public Member getMember(Member mbr)
Description copied from interface: ChannelInterceptor
Intercepts the code>Channel.getMember(Member) method

Specified by:
getMember in interface ChannelInterceptor
Overrides:
getMember in class ChannelInterceptorBase
Parameters:
mbr - Member
Returns:
Member
See Also:
Channel.getMember(Member)

getLocalMember

public Member getLocalMember(boolean incAlive)
Description copied from class: ChannelInterceptorBase
Return the member that represents this node.

Specified by:
getLocalMember in interface ChannelInterceptor
Overrides:
getLocalMember in class ChannelInterceptorBase
Parameters:
incAlive - boolean
Returns:
Member
See Also:
Channel.getLocalMember(boolean)

heartbeat

public void heartbeat()
Description copied from interface: ChannelInterceptor
The heartbeat() method gets invoked periodically to allow interceptors to clean up resources, time out object and perform actions that are unrelated to sending/receiving data.

Specified by:
heartbeat in interface ChannelInterceptor
Specified by:
heartbeat in interface Heartbeat
Overrides:
heartbeat in class ChannelInterceptorBase

checkMembers

public void checkMembers(boolean checkAll)

performForcedCheck

protected void performForcedCheck()

performBasicCheck

protected void performBasicCheck()

setupMembership

protected void setupMembership()

memberAlive

protected boolean memberAlive(Member mbr)

memberAlive

protected static boolean memberAlive(Member mbr,
                                     byte[] msgData,
                                     boolean sendTest,
                                     boolean readTest,
                                     long readTimeout,
                                     long conTimeout,
                                     int optionFlag)

getPerformConnectTest

public boolean getPerformConnectTest()

getReadTestTimeout

public long getReadTestTimeout()

getPerformSendTest

public boolean getPerformSendTest()

getPerformReadTest

public boolean getPerformReadTest()

getConnectTimeout

public long getConnectTimeout()

setPerformConnectTest

public void setPerformConnectTest(boolean performConnectTest)

setPerformReadTest

public void setPerformReadTest(boolean performReadTest)

setPerformSendTest

public void setPerformSendTest(boolean performSendTest)

setReadTestTimeout

public void setReadTestTimeout(long readTestTimeout)

setConnectTimeout

public void setConnectTimeout(long connectTimeout)

Apache Tomcat 7.0.28

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