public class FD_SOCK extends Protocol implements Runnable
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.
| Modifier and Type | Class and Description |
|---|---|
static class |
FD_SOCK.FdHeader |
| Modifier and Type | Field and Description |
|---|---|
protected String |
bind_interface_str |
protected InetAddress |
external_addr |
protected int |
external_port |
protected Set<Address> |
suspected_mbrs |
| Constructor and Description |
|---|
FD_SOCK() |
| Modifier and Type | Method and Description |
|---|---|
protected Address |
determineCoordinator() |
Object |
down(Event evt)
An event is to be sent down the stack.
|
String |
getLocalAddress() |
String |
getMembers() |
int |
getNumSuspectEventsGenerated() |
String |
getPingableMembers() |
String |
getPingDest() |
void |
init()
Called after instance has been created (null constructor) and before protocol is started.
|
boolean |
isLogSuspectedMessages() |
String |
printCache() |
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) |
Object |
up(Event evt)
An event was received from the layer below.
|
destroy, dumpStats, enableStats, getConfigurableObjects, getDownProtocol, getId, getLevel, getName, getProtocolStack, getSocketFactory, getThreadFactory, getTransport, getUpProtocol, getValue, isErgonomics, printStats, providedDownServices, providedUpServices, requiredDownServices, requiredUpServices, resetStatistics, setDownProtocol, setErgonomics, setId, setLevel, setProtocolStack, setSocketFactory, setUpProtocol, setValue, setValues, statsEnabledprotected InetAddress external_addr
protected int external_port
protected String bind_interface_str
public String getLocalAddress()
public String getMembers()
public String getPingableMembers()
public String getPingDest()
public int getNumSuspectEventsGenerated()
public boolean isLogSuspectedMessages()
public void setLogSuspectedMessages(boolean log_suspected_msgs)
public String printSuspectHistory()
public String printCache()
public void init()
throws Exception
Protocolpublic void start()
throws Exception
ProtocolChannel.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 ProtocolException - Thrown if protocol cannot be started successfully. This will cause the ProtocolStack
to fail, so Channel.connect(String) will throw an exceptionpublic void stop()
ProtocolChannel.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 flushedpublic void resetStats()
resetStats in class Protocolpublic Object up(Event evt)
Protocoldown_prot.down() or c) the event (or another event) is sent up
the stack using up_prot.up().public Object down(Event evt)
Protocoldown_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().public void run()
public void stopServerSocket(boolean graceful)
protected Address determineCoordinator()
Copyright © 2012 JBoss by Red Hat. All Rights Reserved.