Class TcpFailureDetector
java.lang.Object
org.apache.catalina.tribes.group.ChannelInterceptorBase
org.apache.catalina.tribes.group.interceptors.TcpFailureDetector
- All Implemented Interfaces:
ChannelInterceptor,TcpFailureDetectorMBean,Heartbeat,MembershipListener
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:
- It intercepts memberDisappeared events
- It catches send errors
-
Nested Class Summary
Nested classes/interfaces inherited from interface org.apache.catalina.tribes.ChannelInterceptor
ChannelInterceptor.InterceptorEvent -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected longprotected Membershipprotected booleanprotected booleanprotected longprotected intprotected static final StringManagerprotected static final byte[]Fields inherited from class org.apache.catalina.tribes.group.ChannelInterceptorBase
optionFlag -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidcheckMembers(boolean checkAll) longgetLocalMember(boolean incAlive) Intercepts theChannel.getLocalMember(boolean)methodIntercepts theChannel.getMember(Member)methodMember[]Intercepts theChannel.getMembers()methodbooleanbooleanlongintbooleanIntercepts theChannel.hasMembers()methodvoidTheheartbeat()method gets invoked periodically to allow interceptors to clean up resources, time out object and perform actions that are unrelated to sending/receiving data.voidmemberAdded(Member member) A member was added to the groupprotected booleanmemberAlive(Member mbr) protected booleanmemberAlive(Member mbr, byte[] msgData, boolean sendTest, boolean readTest, long readTimeout, long conTimeout, int optionFlag) voidmemberDisappeared(Member member) A member was removed from the group
If the member left voluntarily, the Member.getCommand will contain the Member.SHUTDOWN_PAYLOAD datavoidthemessageReceivedis invoked when a message is received.protected voidprotected voidvoidsendMessage(Member[] destination, ChannelMessage msg, InterceptorPayload payload) ThesendMessagemethod is called when a message is being sent to one more destinations.voidsetConnectTimeout(long connectTimeout) voidsetPerformReadTest(boolean performReadTest) voidsetPerformSendTest(boolean performSendTest) voidsetReadTestTimeout(long readTestTimeout) voidsetRemoveSuspectsTimeout(int removeSuspectsTimeout) protected voidMethods inherited from class org.apache.catalina.tribes.group.ChannelInterceptorBase
fireInterceptorEvent, getChannel, getNext, getOptionFlag, getPrevious, okToProcess, setChannel, setNext, setOptionFlag, setPrevious, start, stopMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.apache.catalina.tribes.group.interceptors.TcpFailureDetectorMBean
getOptionFlag
-
Field Details
-
sm
-
TCP_FAIL_DETECT
protected static final byte[] TCP_FAIL_DETECT -
connectTimeout
protected long connectTimeout -
performSendTest
protected boolean performSendTest -
performReadTest
protected boolean performReadTest -
readTestTimeout
protected long readTestTimeout -
membership
-
removeSuspects
-
addSuspects
-
removeSuspectsTimeout
protected int removeSuspectsTimeout
-
-
Constructor Details
-
TcpFailureDetector
public TcpFailureDetector()
-
-
Method Details
-
sendMessage
public void sendMessage(Member[] destination, ChannelMessage msg, InterceptorPayload payload) throws ChannelException Description copied from interface:ChannelInterceptorThesendMessagemethod 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 invokinggetNext().sendMessage(destination,msg,payload)
Alternatively the interceptor can stop the message from being sent by not invokinggetNext().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:
sendMessagein interfaceChannelInterceptor- Overrides:
sendMessagein classChannelInterceptorBase- Parameters:
destination- Member[] - the destination for this messagemsg- ChannelMessage - the message to be sentpayload- InterceptorPayload - the payload, carrying an error handler and future useful data, can be null- Throws:
ChannelException- if a serialization error happens.- See Also:
-
messageReceived
Description copied from interface:ChannelInterceptorthemessageReceivedis invoked when a message is received.ChannelMessage.getAddress()is the sender, or the reply-to address if it has been overwritten.- Specified by:
messageReceivedin interfaceChannelInterceptor- Overrides:
messageReceivedin classChannelInterceptorBase- Parameters:
msg- ChannelMessage
-
memberAdded
Description copied from interface:MembershipListenerA member was added to the group- Specified by:
memberAddedin interfaceMembershipListener- Overrides:
memberAddedin classChannelInterceptorBase- Parameters:
member- Member - the member that was added
-
memberDisappeared
Description copied from interface:MembershipListenerA member was removed from the group
If the member left voluntarily, the Member.getCommand will contain the Member.SHUTDOWN_PAYLOAD data- Specified by:
memberDisappearedin interfaceMembershipListener- Overrides:
memberDisappearedin classChannelInterceptorBase- Parameters:
member- Member- See Also:
-
hasMembers
public boolean hasMembers()Description copied from interface:ChannelInterceptorIntercepts theChannel.hasMembers()method- Specified by:
hasMembersin interfaceChannelInterceptor- Overrides:
hasMembersin classChannelInterceptorBase- Returns:
- boolean - if the channel has members in its membership group
- See Also:
-
getMembers
Description copied from interface:ChannelInterceptorIntercepts theChannel.getMembers()method- Specified by:
getMembersin interfaceChannelInterceptor- Overrides:
getMembersin classChannelInterceptorBase- Returns:
- the members
- See Also:
-
getMember
Description copied from interface:ChannelInterceptorIntercepts theChannel.getMember(Member)method- Specified by:
getMemberin interfaceChannelInterceptor- Overrides:
getMemberin classChannelInterceptorBase- Parameters:
mbr- Member- Returns:
- Member - the actual member information, including stay alive
- See Also:
-
getLocalMember
Description copied from interface:ChannelInterceptorIntercepts theChannel.getLocalMember(boolean)method- Specified by:
getLocalMemberin interfaceChannelInterceptor- Overrides:
getLocalMemberin classChannelInterceptorBase- Parameters:
incAlive- boolean- Returns:
- the member that represents this node
- See Also:
-
heartbeat
public void heartbeat()Description copied from interface:ChannelInterceptorTheheartbeat()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:
heartbeatin interfaceChannelInterceptor- Specified by:
heartbeatin interfaceHeartbeat- Overrides:
heartbeatin classChannelInterceptorBase
-
checkMembers
public void checkMembers(boolean checkAll) - Specified by:
checkMembersin interfaceTcpFailureDetectorMBean
-
performForcedCheck
protected void performForcedCheck() -
performBasicCheck
protected void performBasicCheck() -
setupMembership
protected void setupMembership() -
memberAlive
-
memberAlive
protected boolean memberAlive(Member mbr, byte[] msgData, boolean sendTest, boolean readTest, long readTimeout, long conTimeout, int optionFlag) -
getReadTestTimeout
public long getReadTestTimeout()- Specified by:
getReadTestTimeoutin interfaceTcpFailureDetectorMBean
-
getPerformSendTest
public boolean getPerformSendTest()- Specified by:
getPerformSendTestin interfaceTcpFailureDetectorMBean
-
getPerformReadTest
public boolean getPerformReadTest()- Specified by:
getPerformReadTestin interfaceTcpFailureDetectorMBean
-
getConnectTimeout
public long getConnectTimeout()- Specified by:
getConnectTimeoutin interfaceTcpFailureDetectorMBean
-
getRemoveSuspectsTimeout
public int getRemoveSuspectsTimeout()- Specified by:
getRemoveSuspectsTimeoutin interfaceTcpFailureDetectorMBean
-
setPerformReadTest
public void setPerformReadTest(boolean performReadTest) - Specified by:
setPerformReadTestin interfaceTcpFailureDetectorMBean
-
setPerformSendTest
public void setPerformSendTest(boolean performSendTest) - Specified by:
setPerformSendTestin interfaceTcpFailureDetectorMBean
-
setReadTestTimeout
public void setReadTestTimeout(long readTestTimeout) - Specified by:
setReadTestTimeoutin interfaceTcpFailureDetectorMBean
-
setConnectTimeout
public void setConnectTimeout(long connectTimeout) - Specified by:
setConnectTimeoutin interfaceTcpFailureDetectorMBean
-
setRemoveSuspectsTimeout
public void setRemoveSuspectsTimeout(int removeSuspectsTimeout) - Specified by:
setRemoveSuspectsTimeoutin interfaceTcpFailureDetectorMBean
-