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, statsEnabled
protected 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
Protocol
public void start() throws 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
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 flushedpublic void resetStats()
resetStats
in class Protocol
public Object up(Event evt)
Protocol
down_prot.down()
or c) the event (or another event) is sent up
the stack using up_prot.up()
.public 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()
.public void run()
public void stopServerSocket(boolean graceful)
protected Address determineCoordinator()
Copyright © 2012 JBoss by Red Hat. All Rights Reserved.