|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.jgroups.stack.Protocol org.jgroups.protocols.FD_SOCK
public class FD_SOCK
Failure detection protocol based on sockets. Failure detection is ring-based. Each member creates a server socket and announces its address together with the server socket's address in a multicast. A pinger thread will be started when the membership goes above 1 and will be stopped when it drops below 2. The pinger thread connects to its neighbor on the right and waits until the socket is closed. When the socket is closed by the monitored peer in an abnormal fashion (IOException), the neighbor will be suspected.
The main feature of this protocol is that no ping messages need to be exchanged between any 2 peers, and failure detection relies entirely on TCP sockets. The advantage is that no activity will take place between 2 peers as long as they are alive (i.e. have their server sockets open). The disadvantage is that hung servers or crashed routers will not cause sockets to be closed, therefore they won't be detected. The FD_SOCK protocol will work for groups where members are on different hosts
The costs involved are 2 additional threads: one that monitors the client side of the socket connection (to monitor a peer) and another one that manages the server socket. However, those threads will be idle as long as both peers are running.
Nested Class Summary | |
---|---|
static class |
FD_SOCK.FdHeader
|
Field Summary | |
---|---|
protected java.lang.String |
bind_interface_str
|
protected java.net.InetAddress |
external_addr
|
protected int |
external_port
|
protected java.util.Set<Address> |
suspected_mbrs
|
Fields inherited from class org.jgroups.stack.Protocol |
---|
down_prot, ergonomics, id, log, name, stack, stats, up_prot |
Constructor Summary | |
---|---|
FD_SOCK()
|
Method Summary | |
---|---|
protected Address |
determineCoordinator()
|
java.lang.Object |
down(Event evt)
An event is to be sent down the stack. |
java.lang.String |
getLocalAddress()
|
java.lang.String |
getMembers()
|
int |
getNumSuspectEventsGenerated()
|
java.lang.String |
getPingableMembers()
|
java.lang.String |
getPingDest()
|
void |
init()
Called after instance has been created (null constructor) and before protocol is started. |
boolean |
isLogSuspectedMessages()
|
java.lang.String |
printCache()
|
java.lang.String |
printSuspectHistory()
|
void |
resetStats()
|
void |
run()
Runs as long as there are 2 members and more. |
void |
setLogSuspectedMessages(boolean log_suspected_msgs)
|
void |
start()
This method is called on a Channel.connect(String) . |
void |
stop()
This method is called on a Channel.disconnect() . |
void |
stopServerSocket(boolean graceful)
|
java.lang.Object |
up(Event evt)
An event was received from the layer below. |
Methods inherited from class org.jgroups.stack.Protocol |
---|
destroy, dumpStats, enableStats, getConfigurableObjects, getDownProtocol, getDownServices, getId, getIdsAbove, getLevel, getName, getProtocolStack, getSocketFactory, getThreadFactory, getTransport, getUpProtocol, getUpServices, getValue, isErgonomics, printStats, providedDownServices, providedUpServices, requiredDownServices, requiredUpServices, resetStatistics, setDownProtocol, setErgonomics, setId, setLevel, setProtocolStack, setSocketFactory, setUpProtocol, setValue, setValues, statsEnabled |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
protected java.net.InetAddress external_addr
protected int external_port
protected java.lang.String bind_interface_str
protected final java.util.Set<Address> suspected_mbrs
Constructor Detail |
---|
public FD_SOCK()
Method Detail |
---|
public java.lang.String getLocalAddress()
public java.lang.String getMembers()
public java.lang.String getPingableMembers()
public java.lang.String getPingDest()
public int getNumSuspectEventsGenerated()
public boolean isLogSuspectedMessages()
public void setLogSuspectedMessages(boolean log_suspected_msgs)
public java.lang.String printSuspectHistory()
public java.lang.String printCache()
public void init() throws java.lang.Exception
Protocol
init
in class Protocol
java.lang.Exception
- Thrown if protocol cannot be initialized successfully. This will cause the
ProtocolStack to fail, so the channel constructor will throw an exceptionpublic void start() throws java.lang.Exception
Protocol
Channel.connect(String)
. Starts work.
Protocols are connected and queues are ready to receive events.
Will be called from bottom to top. This call will replace
the START and START_OK events.
start
in class Protocol
java.lang.Exception
- Thrown if protocol cannot be started successfully. This will cause the ProtocolStack
to fail, so Channel.connect(String)
will throw an exceptionpublic void stop()
Protocol
Channel.disconnect()
. Stops work (e.g. by closing multicast socket).
Will be called from top to bottom. This means that at the time of the method invocation the
neighbor protocol below is still working. This method will replace the
STOP, STOP_OK, CLEANUP and CLEANUP_OK events. The ProtocolStack guarantees that
when this method is called all messages in the down queue will have been flushed
stop
in class Protocol
public void resetStats()
resetStats
in class Protocol
public java.lang.Object up(Event evt)
Protocol
down_prot.down()
or c) the event (or another event) is sent up
the stack using up_prot.up()
.
up
in class Protocol
public java.lang.Object down(Event evt)
Protocol
down_prot.down()
. In case of a GET_ADDRESS event (which tries to
retrieve the stack's address from one of the bottom layers), the layer may need to send
a new response event back up the stack using up_prot.up()
.
down
in class Protocol
public void run()
run
in interface java.lang.Runnable
public void stopServerSocket(boolean graceful)
protected Address determineCoordinator()
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |