Package org.jgroups.protocols
Class MERGE2
java.lang.Object
org.jgroups.stack.Protocol
org.jgroups.protocols.MERGE2
Protocol to discover subgroups; e.g., existing due to a network partition (that healed). Example: group
{p,q,r,s,t,u,v,w} is split into 3 subgroups {p,q}, {r,s,t,u} and {v,w}. This protocol will eventually send
a MERGE event with the coordinators of each subgroup up the stack: {p,r,v}. Note that - depending on the time
of subgroup discovery - there could also be 2 MERGE events, which first join 2 of the subgroups, and then the
resulting group to the last subgroup. The real work of merging the subgroups into one larger group is done
somewhere above this protocol (typically in the GMS protocol).
This protocol works as follows:
- If coordinator: periodically retrieve the initial membership (using the FIND_INITIAL_MBRS event provided e.g. by PING or TCPPING protocols. This list contains {coord,addr} pairs.
- If there is more than 1 coordinator:
- Get all coordinators
- Create a MERGE event with the list of coordinators as argument
- Send the event up the stack
Requires: FIND_INITIAL_MBRS event from below
Provides: sends MERGE event with list of coordinators up the stack
- Author:
- Bela Ban, Oct 16 2001
-
Field Summary
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionAn event is to be sent down the stack.long
long
getName()
boolean
void
init()
Called after instance has been created (null constructor) and before protocol is started.List of events that are required to be answered by some layer below.void
Resumes the sending of merge multicast (only if coord)void
Discovers members and detects whether we have multiple coordinator.void
setMaxInterval
(long l) void
setMinInterval
(long i) boolean
setProperties
(Properties props) Configures the protocol initially.void
stop()
This method is called on aChannel.disconnect()
.void
Suspends the sending of merge multicasts (only if coord)An event was received from the layer below.Methods inherited from class org.jgroups.stack.Protocol
destroy, downThreadEnabled, dumpStats, enableStats, getDownProtocol, getProperties, getProtocolStack, getThreadFactory, getTransport, getUpProtocol, printStats, providedDownServices, providedUpServices, requiredUpServices, resetStats, setDownProtocol, setPropertiesInternal, setProtocolStack, setUpProtocol, start, statsEnabled, upThreadEnabled
-
Constructor Details
-
MERGE2
public MERGE2()
-
-
Method Details
-
init
Description copied from class:Protocol
Called after instance has been created (null constructor) and before protocol is started. Properties are already set. Other protocols are not yet connected and events cannot yet be sent. -
getName
-
getMinInterval
public long getMinInterval() -
setMinInterval
public void setMinInterval(long i) -
getMaxInterval
public long getMaxInterval() -
setMaxInterval
public void setMaxInterval(long l) -
getSuspended
public boolean getSuspended() -
setProperties
Description copied from class:Protocol
Configures the protocol initially. A configuration string consists of name=value items, separated by a ';' (semicolon), e.g.:"loopback=false;unicast_inport=4444"
- Overrides:
setProperties
in classProtocol
-
requiredDownServices
Description copied from class:Protocol
List of events that are required to be answered by some layer below.- Overrides:
requiredDownServices
in classProtocol
- Returns:
- Vector (of Integers)
-
stop
public void stop()Description copied from class:Protocol
This method is called on aChannel.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 -
up
Description copied from class:Protocol
An event was received from the layer below. Usually the current layer will want to examine the event type and - depending on its type - perform some computation (e.g. removing headers from a MSG event type, or updating the internal membership list when receiving a VIEW_CHANGE event). Finally the event is either a) discarded, or b) an event is sent down the stack usingdown_prot.down()
or c) the event (or another event) is sent up the stack usingup_prot.up()
. -
down
Description copied from class:Protocol
An event is to be sent down the stack. The layer may want to examine its type and perform some action on it, depending on the event's type. If the event is a message MSG, then the layer may need to add a header to it (or do nothing at all) before sending it down the stack usingdown_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 usingup_prot.up()
. -
suspendMergeTask
public void suspendMergeTask()Suspends the sending of merge multicasts (only if coord) -
resumeMergeTask
public void resumeMergeTask()Resumes the sending of merge multicast (only if coord) -
sendMergeSolicitation
public void sendMergeSolicitation()Discovers members and detects whether we have multiple coordinator. If so, kicks off a merge
-