org.jgroups.protocols
Class MERGE3
java.lang.Object
org.jgroups.stack.Protocol
org.jgroups.protocols.MERGE3
public class MERGE3
- extends Protocol
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 views of each subgroup up the stack: {p,r,v}.
Works as follows (https://issues.jboss.org/browse/JGRP-1387): every member periodically broadcasts its address (UUID),
logical name, physical address and ViewID information. Other members collect this information and see if the ViewIds
are different (indication of different subpartitions). If they are, the member with the lowest address (first in the
sorted list of collected addresses) sends a MERGE event up the stack, which will be handled by GMS.
The others do nothing.
The advantage compared to MERGE2
is that there are no merge collisions caused by multiple merges going on.
Also, the INFO traffic is spread out over max_interval, and every member sends its physical address with INFO, so
we don't need to fetch the physical address first.
- Since:
- 3.1
- Author:
- Bela Ban, Nov 2011
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, 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 |
min_interval
protected long min_interval
max_interval
protected long max_interval
max_participants_in_merge
protected int max_participants_in_merge
check_interval
protected long check_interval
local_addr
protected Address local_addr
view
protected View view
timer
protected TimeScheduler timer
info_sender
protected java.util.concurrent.Future<?> info_sender
view_consistency_checker
protected java.util.concurrent.Future<?> view_consistency_checker
views
protected final java.util.concurrent.ConcurrentMap<ViewId,java.util.SortedSet<Address>> views
view_rsps
protected final ResponseCollector<View> view_rsps
transport_supports_multicasting
protected boolean transport_supports_multicasting
cluster_name
protected java.lang.String cluster_name
is_coord
protected volatile boolean is_coord
num_merge_events
protected int num_merge_events
MERGE3
public MERGE3()
getViews
public int getViews()
isViewConsistencyCheckerRunning
public boolean isViewConsistencyCheckerRunning()
isMergeTaskRunning
public boolean isMergeTaskRunning()
isInfoSenderRunning
public boolean isInfoSenderRunning()
dumpViews
public java.lang.String dumpViews()
clearViews
public void clearViews()
init
public void init()
throws java.lang.Exception
- 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.
- Overrides:
init
in class Protocol
- Throws:
java.lang.Exception
- Thrown if protocol cannot be initialized successfully. This will cause the
ProtocolStack to fail, so the channel constructor will throw an exception
stop
public void stop()
- Description copied from class:
Protocol
- This method is called on a
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
- Overrides:
stop
in class Protocol
getMinInterval
public long getMinInterval()
setMinInterval
public void setMinInterval(long i)
getMaxInterval
public long getMaxInterval()
setMaxInterval
public void setMaxInterval(long val)
computeCheckInterval
protected long computeCheckInterval()
isMergeRunning
protected boolean isMergeRunning()
startInfoSender
protected void startInfoSender()
stopInfoSender
protected void stopInfoSender()
startViewConsistencyChecker
protected void startViewConsistencyChecker()
stopViewConsistencyChecker
protected void stopViewConsistencyChecker()
down
public java.lang.Object down(Event evt)
- 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 using
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()
.
- Overrides:
down
in class Protocol
up
public java.lang.Object up(Event evt)
- 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 using
down_prot.down()
or c) the event (or another event) is sent up
the stack using up_prot.up()
.
- Overrides:
up
in class Protocol
detectDifferentViews
public static java.util.List<View> detectDifferentViews(java.util.Map<Address,View> map)
Copyright © 1998-2012 Bela Ban / Red Hat. All Rights Reserved.