Package 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
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected classMERGE3.InfoSenderstatic classMERGE3.MergeHeaderprotected classMERGE3.ViewConsistencyChecker
-
Field Summary
Fields Modifier and Type Field Description protected EventASYNC_DISCOVERY_EVENTprotected longcheck_intervalprotected java.lang.Stringcluster_nameprotected java.util.function.Consumer<PingData>discovery_rsp_cbprotected MERGE3.InfoSenderinfo_senderprotected java.util.concurrent.Future<?>info_sender_futureprotected booleanis_coordprotected Addresslocal_addrprotected longmax_intervalprotected intmax_participants_in_mergeprotected longmin_intervalprotected intnum_merge_eventsprotected booleanonly_coords_run_consistency_checkerDeprecated.protected TimeSchedulertimerprotected booleantransport_supports_multicastingprotected Viewviewprotected java.util.concurrent.Future<?>view_consistency_checkerprotected ResponseCollector<View>view_rspsprotected java.util.Map<Address,ViewId>views-
Fields inherited from class org.jgroups.stack.Protocol
after_creation_hook, down_prot, ergonomics, id, log, stack, stats, up_prot
-
-
Constructor Summary
Constructors Constructor Description MERGE3()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected voidaddInfo(Address sender, ViewId view_id, java.lang.String logical_name, PhysicalAddress physical_addr)Adds received INFO to views hashmapvoidcheckInconsistencies()voidclearViews()protected longcomputeCheckInterval()protected java.util.Map<ViewId,java.util.Set<Address>>convertViews()protected MERGE3.MergeHeadercreateInfo()static java.util.List<View>detectDifferentViews(java.util.Map<Address,View> map)protected booleandifferentViewIds()java.lang.Objectdown(Event evt)An event is to be sent down the stack.java.lang.StringdumpViews()longgetCheckInterval()longgetMaxInterval()longgetMinInterval()intgetNumMergeEvents()intgetViews()voidinit()Called after instance has been created (null constructor) and before protocol is started.booleanisInfoSenderRunning()protected booleanisMergeRunning()booleanisMergeTaskRunning()booleanisViewConsistencyCheckerRunning()static Buffermarshal(View view)protected ViewreadView(byte[] buffer, int offset, int length)voidsendInfo()protected voidsendInfoMessage(PingData data)MERGE3setCheckInterval(long ci)MERGE3setMaxInterval(long val)MERGE3setMinInterval(long i)voidstart()This method is called on aJChannel.connect(String).protected voidstartInfoSender()protected voidstartViewConsistencyChecker()voidstop()This method is called on aJChannel.disconnect().protected voidstopInfoSender()protected voidstopViewConsistencyChecker()java.lang.Objectup(Message msg)A single message was received.-
Methods inherited from class org.jgroups.stack.Protocol
accept, afterCreationHook, destroy, down, enableStats, getConfigurableObjects, getDownProtocol, getDownServices, getId, getIdsAbove, getLevel, getLog, getName, getProtocolStack, getSocketFactory, getThreadFactory, getTransport, getUpProtocol, getUpServices, getValue, isErgonomics, level, parse, providedDownServices, providedUpServices, requiredDownServices, requiredUpServices, resetStatistics, resetStats, setDownProtocol, setErgonomics, setId, setLevel, setProtocolStack, setSocketFactory, setUpProtocol, setValue, statsEnabled, up, up
-
-
-
-
Field Detail
-
min_interval
protected long min_interval
-
max_interval
protected long max_interval
-
max_participants_in_merge
protected int max_participants_in_merge
-
only_coords_run_consistency_checker
@Deprecated protected boolean only_coords_run_consistency_checker
Deprecated.
-
check_interval
protected long check_interval
-
local_addr
protected Address local_addr
-
view
protected volatile View view
-
timer
protected TimeScheduler timer
-
info_sender
protected final MERGE3.InfoSender info_sender
-
info_sender_future
protected java.util.concurrent.Future<?> info_sender_future
-
view_consistency_checker
protected java.util.concurrent.Future<?> view_consistency_checker
-
view_rsps
protected final ResponseCollector<View> view_rsps
-
transport_supports_multicasting
protected boolean transport_supports_multicasting
-
cluster_name
protected java.lang.String cluster_name
-
discovery_rsp_cb
protected final java.util.function.Consumer<PingData> discovery_rsp_cb
-
ASYNC_DISCOVERY_EVENT
protected final Event ASYNC_DISCOVERY_EVENT
-
is_coord
protected volatile boolean is_coord
-
num_merge_events
protected int num_merge_events
-
-
Method Detail
-
getViews
public int getViews()
-
getNumMergeEvents
public int getNumMergeEvents()
-
isViewConsistencyCheckerRunning
public boolean isViewConsistencyCheckerRunning()
-
isMergeTaskRunning
public boolean isMergeTaskRunning()
-
isInfoSenderRunning
public boolean isInfoSenderRunning()
-
dumpViews
public java.lang.String dumpViews()
-
clearViews
public void clearViews()
-
sendInfo
public void sendInfo()
-
checkInconsistencies
public void checkInconsistencies()
-
init
public void init() throws java.lang.ExceptionDescription copied from class:ProtocolCalled 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.
-
start
public void start() throws java.lang.ExceptionDescription copied from class:ProtocolThis method is called on aJChannel.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.- Overrides:
startin classProtocol- Throws:
java.lang.Exception- Thrown if protocol cannot be started successfully. This will cause the ProtocolStack to fail, soJChannel.connect(String)will throw an exception
-
stop
public void stop()
Description copied from class:ProtocolThis method is called on aJChannel.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
-
getMinInterval
public long getMinInterval()
-
setMinInterval
public MERGE3 setMinInterval(long i)
-
getMaxInterval
public long getMaxInterval()
-
setMaxInterval
public MERGE3 setMaxInterval(long val)
-
getCheckInterval
public long getCheckInterval()
-
setCheckInterval
public MERGE3 setCheckInterval(long ci)
-
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:ProtocolAn event is to be sent down the stack. A protocol 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 protocol may need to add a header to it (or do nothing at all) before sending it down the stack usingdown_prot.down().
-
up
public java.lang.Object up(Message msg)
Description copied from class:ProtocolA single message was received. Protocols may examine the message and do something (e.g. add a header) with it before passing it up.
-
detectDifferentViews
public static java.util.List<View> detectDifferentViews(java.util.Map<Address,View> map)
-
readView
protected View readView(byte[] buffer, int offset, int length)
-
createInfo
protected MERGE3.MergeHeader createInfo()
-
addInfo
protected void addInfo(Address sender, ViewId view_id, java.lang.String logical_name, PhysicalAddress physical_addr)
Adds received INFO to views hashmap
-
differentViewIds
protected boolean differentViewIds()
-
sendInfoMessage
protected void sendInfoMessage(PingData data)
-
-