|
||||||||||
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.MERGE2
public class 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:
Requires: FIND_INITIAL_MBRS event from below
Provides: sends MERGE event with list of coordinators up the stack
Nested Class Summary | |
---|---|
protected class |
MERGE2.FindSubgroupsTask
Task periodically executing (if role is coordinator). |
Field Summary | |
---|---|
protected int |
inconsistent_view_threshold
|
protected boolean |
is_coord
|
protected Address |
local_addr
|
protected long |
max_interval
|
protected java.util.Set<Address> |
members
|
protected java.util.Set<Address> |
merge_candidates
|
protected boolean |
merge_fast
|
protected long |
merge_fast_delay
|
protected long |
min_interval
|
protected int |
num_inconsistent_views
|
protected int |
num_merge_events
|
protected MERGE2.FindSubgroupsTask |
task
|
protected TimeScheduler |
timer
|
protected View |
view
|
Fields inherited from class org.jgroups.stack.Protocol |
---|
down_prot, ergonomics, id, log, name, stack, stats, up_prot |
Constructor Summary | |
---|---|
MERGE2()
|
Method Summary | |
---|---|
java.lang.Object |
down(Event evt)
An event is to be sent down the stack. |
long |
getMaxInterval()
|
long |
getMinInterval()
|
void |
init()
Called after instance has been created (null constructor) and before protocol is started. |
protected boolean |
isMergeRunning()
|
boolean |
isMergeTaskRunning()
|
java.util.List<java.lang.Integer> |
requiredDownServices()
List of events that are required to be answered by some layer below |
void |
sendMergeSolicitation()
Discovers members and detects whether we have multiple coordinator. |
void |
setMaxInterval(long l)
|
void |
setMinInterval(long i)
|
void |
startMergeTask()
|
void |
stop()
This method is called on a Channel.disconnect() . |
void |
stopMergeTask()
|
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, requiredUpServices, resetStatistics, resetStats, setDownProtocol, setErgonomics, setId, setLevel, setProtocolStack, setSocketFactory, setUpProtocol, setValue, setValues, start, statsEnabled |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
protected long min_interval
protected long max_interval
protected int inconsistent_view_threshold
protected boolean merge_fast
protected long merge_fast_delay
protected Address local_addr
protected View view
protected final java.util.Set<Address> members
protected final java.util.Set<Address> merge_candidates
protected final MERGE2.FindSubgroupsTask task
protected volatile boolean is_coord
protected TimeScheduler timer
protected int num_inconsistent_views
protected int num_merge_events
Constructor Detail |
---|
public MERGE2()
Method Detail |
---|
public boolean isMergeTaskRunning()
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 long getMinInterval()
public void setMinInterval(long i)
public long getMaxInterval()
public void setMaxInterval(long l)
protected boolean isMergeRunning()
public java.util.List<java.lang.Integer> requiredDownServices()
Protocol
requiredDownServices
in class Protocol
public void sendMergeSolicitation()
public void startMergeTask()
public void stopMergeTask()
public 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 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 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
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |