Class MERGE3
- All Implemented Interfaces:
Lifecycle
Works as follows (https://issues.redhat.com/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
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected classstatic classprotected class -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final Eventprotected longprotected Stringprotected final MERGE3.InfoSenderprotected Future<?> protected booleanprotected longprotected intprotected longprotected intprotected TimeSchedulerprotected booleanprotected Viewprotected Future<?> protected final ResponseCollector<View> Fields inherited from class org.jgroups.stack.Protocol
after_creation_hook, down_prot, ergonomics, id, local_addr, log, policies, stack, stats, up_prot -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected voidaddInfo(Address sender, ViewId view_id, String logical_name, PhysicalAddress physical_addr) Adds received INFO to views hashmapvoidvoidprotected longprotected MERGE3.MergeHeaderdetectDifferentViews(Map<Address, View> map) protected booleanAn event is to be sent down the stack.longlongintlongintintgetViews()protected Objecthandle(MERGE3.MergeHeader hdr, Message msg) voidinit()Called after a protocol has been created and before the protocol is started.booleanisCoord()booleanprotected booleanbooleanbooleanstatic ByteArrayprotected ViewreadView(byte[] buffer, int offset, int length) voidsendInfo()protected voidsendInfoMessage(PingData data) setCheckInterval(long ci) setMaxInterval(long val) setMaxParticipantsInMerge(int m) setMinInterval(long i) voidstart()This method is called on aJChannel.connect(String); starts work.protected voidprotected voidvoidstop()Called on aJChannel.disconnect(); stops work (e.g.protected voidprotected voidA single message was received.voidup(MessageBatch batch) Sends up a multiple messages in aMessageBatch.Methods inherited from class org.jgroups.stack.Protocol
accept, addPolicy, addr, addr, afterCreationHook, destroy, down, down, enableStats, getAddress, getComponents, getDownProtocol, getDownServices, getId, getIdsAbove, getLevel, getLog, getName, getPolicies, getProtocolStack, getSocketFactory, getThreadFactory, getTransport, getUpProtocol, getUpServices, getValue, isErgonomics, level, parse, policies, providedDownServices, providedUpServices, removePolicy, requiredDownServices, requiredUpServices, resetStatistics, resetStats, setAddress, setDownProtocol, setErgonomics, setId, setLevel, setPolicies, setProtocolStack, setSocketFactory, setUpProtocol, setValue, statsEnabled, toString, up
-
Field Details
-
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 -
view
-
timer
-
info_sender
-
info_sender_future
-
view_consistency_checker
-
views
-
view_rsps
-
transport_supports_multicasting
protected boolean transport_supports_multicasting -
cluster_name
-
discovery_rsp_cb
-
ASYNC_DISCOVERY_EVENT
-
is_coord
protected volatile boolean is_coord -
num_merge_events
protected int num_merge_events
-
-
Constructor Details
-
MERGE3
public MERGE3()
-
-
Method Details
-
getViews
public int getViews() -
getNumMergeEvents
public int getNumMergeEvents() -
isViewConsistencyCheckerRunning
public boolean isViewConsistencyCheckerRunning() -
isMergeTaskRunning
public boolean isMergeTaskRunning() -
isInfoSenderRunning
public boolean isInfoSenderRunning() -
dumpViews
-
clearViews
public void clearViews() -
sendInfo
public void sendInfo() -
checkInconsistencies
public void checkInconsistencies() -
init
Description copied from class:ProtocolCalled after a protocol has been created and before the protocol is started. Attributes are already set. Other protocols are not yet connected and events cannot yet be sent. -
start
Description copied from class:ProtocolThis method is called on aJChannel.connect(String); starts work. Protocols are connected ready to receive events. Will be called from bottom to top. -
stop
public void stop()Description copied from class:ProtocolCalled on aJChannel.disconnect(); stops work (e.g. by closing multicast socket). Will be called from top to bottom. -
getMinInterval
public long getMinInterval() -
setMinInterval
-
getMaxInterval
public long getMaxInterval() -
setMaxInterval
-
getCheckInterval
public long getCheckInterval() -
setCheckInterval
-
getMaxParticipantsInMerge
public int getMaxParticipantsInMerge() -
setMaxParticipantsInMerge
-
isCoord
public boolean isCoord() -
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
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
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. -
up
Description copied from class:ProtocolSends up a multiple messages in aMessageBatch. The sender of the batch is always the same, and so is the destination (null == multicast messages). Messages in a batch can be OOB messages, regular messages, or mixed messages, although the transport itself will create initial MessageBatches that contain only either OOB or regular messages.The default processing below sends messages up the stack individually, based on a matching criteria (calling
Protocol.accept(Message)), and - if true - callsProtocol.up(org.jgroups.Event)for that message and removes the message. If the batch is not empty, it is passed up, or else it is dropped.Subclasses should check if there are any messages destined for them (e.g. using
MessageBatch.iterator(Predicate)), then possibly remove and process them and finally pass the batch up to the next protocol. Protocols can also modify messages in place, e.g. ENCRYPT could decrypt all encrypted messages in the batch, not remove them, and pass the batch up when done. -
detectDifferentViews
-
marshal
-
readView
-
handle
-
createInfo
-
addInfo
protected void addInfo(Address sender, ViewId view_id, String logical_name, PhysicalAddress physical_addr) Adds received INFO to views hashmap -
convertViews
-
differentViewIds
protected boolean differentViewIds() -
sendInfoMessage
-