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 class
MERGE3.InfoSender
static class
MERGE3.MergeHeader
protected class
MERGE3.ViewConsistencyChecker
-
Field Summary
Fields Modifier and Type Field Description protected Event
ASYNC_DISCOVERY_EVENT
protected long
check_interval
protected java.lang.String
cluster_name
protected java.util.function.Consumer<PingData>
discovery_rsp_cb
protected MERGE3.InfoSender
info_sender
protected java.util.concurrent.Future<?>
info_sender_future
protected boolean
is_coord
protected Address
local_addr
protected long
max_interval
protected int
max_participants_in_merge
protected long
min_interval
protected int
num_merge_events
protected boolean
only_coords_run_consistency_checker
Deprecated.protected TimeScheduler
timer
protected boolean
transport_supports_multicasting
protected View
view
protected java.util.concurrent.Future<?>
view_consistency_checker
protected ResponseCollector<View>
view_rsps
protected 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 void
addInfo(Address sender, ViewId view_id, java.lang.String logical_name, PhysicalAddress physical_addr)
Adds received INFO to views hashmapvoid
checkInconsistencies()
void
clearViews()
protected long
computeCheckInterval()
protected java.util.Map<ViewId,java.util.Set<Address>>
convertViews()
protected MERGE3.MergeHeader
createInfo()
static java.util.List<View>
detectDifferentViews(java.util.Map<Address,View> map)
protected boolean
differentViewIds()
java.lang.Object
down(Event evt)
An event is to be sent down the stack.java.lang.String
dumpViews()
long
getCheckInterval()
long
getMaxInterval()
long
getMinInterval()
int
getNumMergeEvents()
int
getViews()
void
init()
Called after instance has been created (null constructor) and before protocol is started.boolean
isInfoSenderRunning()
protected boolean
isMergeRunning()
boolean
isMergeTaskRunning()
boolean
isViewConsistencyCheckerRunning()
static Buffer
marshal(View view)
protected View
readView(byte[] buffer, int offset, int length)
void
sendInfo()
protected void
sendInfoMessage(PingData data)
MERGE3
setCheckInterval(long ci)
MERGE3
setMaxInterval(long val)
MERGE3
setMinInterval(long i)
void
start()
This method is called on aJChannel.connect(String)
.protected void
startInfoSender()
protected void
startViewConsistencyChecker()
void
stop()
This method is called on aJChannel.disconnect()
.protected void
stopInfoSender()
protected void
stopViewConsistencyChecker()
java.lang.Object
up(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.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.
-
start
public void start() throws java.lang.Exception
Description copied from class:Protocol
This 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:
start
in 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:Protocol
This 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:Protocol
An 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:Protocol
A 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)
-
-