Package org.jgroups.protocols.pbcast
Class GMS
java.lang.Object
org.jgroups.stack.Protocol
org.jgroups.protocols.pbcast.GMS
- All Implemented Interfaces:
Lifecycle,DiagnosticsHandler.ProbeHandler
Group membership protocol. Handles joins/leaves/crashes (suspicions) and
emits new views accordingly. Use VIEW_ENFORCER on top of this layer to make
sure new members don't receive any messages until they are members
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classstatic class -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final AckCollectorTo collect VIEW_ACKs from all membersprotected intprotected static final Stringprotected static final Stringstatic final shortstatic final shortprotected booleanprotected booleanprotected GmsImplprotected longMembers joined but for which no view has been received yetprotected longprotected final LeaverMembers excluded from group, but for which no view has been received yetprotected final Lockprotected booleanprotected booleanprotected longprotected intprotected intDeprecated.protected final Membershipprotected MembershipChangePolicyprotected final AckCollectorprotected longstatic final shortprotected Mergerprotected intprotected intprotected intprotected static final Stringprotected BoundedList<Address> Keeps track of old members (up to num_prev_mbrs)protected BoundedList<String> protected booleanprotected booleanprotected booleanstatic final shortprotected final Membershipprotected TimeSchedulerprotected final Membershipprotected booleanprotected booleanprotected Viewprotected longprotected final ViewHandler<GmsImpl.Request> Class to process JOIN, LEAVE and MERGE requestsstatic final shortFields 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 TypeMethodDescription_readViewAndDigest(byte[] buffer, int offset, int length) protected boolean_startFlush(View new_view, int maxAttempts, boolean resumeIfFailed, long randomFloor, long randomCeiling) voidvoidvoidvoidvoidcastViewChangeAndSendJoinRsps(View new_view, Digest digest, Collection<Address> expected_acks, Collection<Address> joiners, JoinRsp jr) Broadcasts the new view and digest as VIEW messages, possibly sends JOIN-RSP messages to joiners and then waits for acks from expected_ackscomputeNewMembership(Collection<Collection<Address>> subviews) Computes a merge membershipcomputeNewMembership(List<Address> current_members, Collection<Address> joiners, Collection<Address> leavers, Collection<Address> suspects) Computes the regular membershipprotected static ViewcreateDeltaView(View current_view, View next_view) protected ViewcreateViewFromDeltaView(View current_view, DeltaView delta_view) protected Addressprotected static shortdetermineFlags(View view, Digest digest) protected AddressReturns the second-in-lineAn event is to be sent down the stack.voidprotected AddressgetCoord()Grabs the current digest from NAKACK{2}getImpl()longlongbooleanintOnly used for internal testing, don't use this method !longgetNextView(Collection<Address> joiners, Collection<Address> leavers, Collection<Address> suspected_mbrs) Computes the next view.getView()longReturns the current view and digest.intprotected Objecthandle(GMS.GmsHeader hdr, Message msg) handleProbe(String... keys) Handles a probe.(package private) booleanvoidinit()Called after a protocol has been created and before the protocol is started.protected voidvoidinstallView(View new_view) voidinstallView(View new_view, Digest digest) Sets the new view and sends a VIEW_CHANGE event up and down the stack.booleanisCoord()booleanbooleanbooleanbooleanbooleanbooleanlogCollectMessages(boolean b) booleanlogViewWarnings(boolean b) protected static ByteArraymarshal(Collection<? extends Address> mbrs) static ByteArrayprotected static ByteArrayprotected static ByteArrayvoidSend down a MERGE_DIGEST eventbooleanprintLocalAddress(boolean p) booleanprintPhysicalAddress(boolean p) booleanprintViewDetails(boolean p) protected voidprocess(Collection<GmsImpl.Request> requests) List of events that are provided to layers below (they will be handled when sent from down below)protected JoinRspreadJoinRsp(byte[] buffer, int offset, int length) protected Collection<? extends Address> readMembers(byte[] buffer, int offset, int length) readViewAndDigest(byte[] buffer, int offset, int length) protected ViewIdreadViewId(byte[] buffer, int offset, int length) List of events that are required to be answered by some layer belowvoidvoidvoidsendJoinResponse(JoinRsp rsp, Address dest) protected voidsendJoinResponse(ByteArray marshalled_rsp, Address dest) protected voidsendJoinResponses(JoinRsp jr, Collection<Address> joiners) protected voidsendViewAck(Address dest) voidSend down a SET_DIGEST eventvoidsetJoinTimeout(long t) setLeaveTimeout(long t) setLogCollectMessages(boolean flag) setMaxJoinAttempts(int t) setMembershipChangePolicy(String classname) setMembershipChangePolicy(MembershipChangePolicy membership_change_policy) setMergeTimeout(long t) setViewAckCollectionTimeout(long v) voidstart()This method is called on aJChannel.connect(String); starts work.(package private) booleanstartFlush(View view) (package private) booleanstartFlush(View view, int maxAttempts, long floor, long ceiling) voidstop()Called on aJChannel.disconnect(); stops work (e.g.(package private) void(package private) voidString[]Returns a list of supported keysvoidvoidAn event was received from the protocol below.A single message was received.voidup(MessageBatch batch) Sends up a multiple messages in aMessageBatch.booleanuseDeltaViews(boolean b) view()protected booleanwouldBeNewCoordinator(Address potential_new_coord) Checks whether the potential_new_coord would be the new coordinator (2nd in line)protected static booleanwriteAddresses(View view, Digest digest) 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, providedUpServices, removePolicy, requiredUpServices, resetStatistics, setAddress, setDownProtocol, setErgonomics, setId, setLevel, setPolicies, setProtocolStack, setSocketFactory, setUpProtocol, setValue, statsEnabled, toString
-
Field Details
-
CLIENT
- See Also:
-
COORD
- See Also:
-
PART
- See Also:
-
VIEW_PRESENT
public static final short VIEW_PRESENT- See Also:
-
DIGEST_PRESENT
public static final short DIGEST_PRESENT- See Also:
-
MERGE_VIEW
public static final short MERGE_VIEW- See Also:
-
DELTA_VIEW
public static final short DELTA_VIEW- See Also:
-
READ_ADDRS
public static final short READ_ADDRS- See Also:
-
join_timeout
protected long join_timeout -
max_join_attempts
protected int max_join_attempts -
all_clients_retry_timeout
protected int all_clients_retry_timeout -
leave_timeout
protected long leave_timeout -
max_leave_attempts
Deprecated. -
merge_timeout
protected long merge_timeout -
print_local_addr
protected boolean print_local_addr -
print_physical_addrs
protected boolean print_physical_addrs -
use_delta_views
protected boolean use_delta_views -
num_prev_mbrs
protected int num_prev_mbrs -
num_prev_views
protected int num_prev_views -
view_ack_collection_timeout
protected long view_ack_collection_timeout -
use_flush_if_present
protected boolean use_flush_if_present -
log_collect_msgs
protected boolean log_collect_msgs -
log_view_warnings
protected boolean log_view_warnings -
print_view_details
protected boolean print_view_details -
members
-
num_views
protected int num_views -
prev_views
-
impl
-
lock
-
impls
-
merger
-
leaver
-
tmp_members
-
suspected_mbrs
-
membership_change_policy
-
joining
Members joined but for which no view has been received yet -
leaving
Members excluded from group, but for which no view has been received yet -
prev_members
Keeps track of old members (up to num_prev_mbrs) -
view
-
ltime
protected long ltime -
timer
-
view_handler
Class to process JOIN, LEAVE and MERGE requests -
ack_collector
To collect VIEW_ACKs from all members -
merge_ack_collector
-
flushProtocolInStack
protected boolean flushProtocolInStack -
first_view_sent
protected boolean first_view_sent
-
-
Constructor Details
-
GMS
public GMS()
-
-
Method Details
-
getJoinTimeout
public long getJoinTimeout() -
setJoinTimeout
-
getLeaveTimeout
public long getLeaveTimeout() -
setLeaveTimeout
-
getMergeTimeout
public long getMergeTimeout() -
setMergeTimeout
-
getMaxJoinAttempts
public int getMaxJoinAttempts() -
setMaxJoinAttempts
-
printLocalAddress
public boolean printLocalAddress() -
printLocalAddress
-
printPhysicalAddress
public boolean printPhysicalAddress() -
printPhysicalAddress
-
useDeltaViews
public boolean useDeltaViews() -
useDeltaViews
-
getViewAckCollectionTimeout
public long getViewAckCollectionTimeout() -
setViewAckCollectionTimeout
-
logCollectMessages
public boolean logCollectMessages() -
logCollectMessages
-
logViewWarnings
public boolean logViewWarnings() -
logViewWarnings
-
printViewDetails
public boolean printViewDetails() -
printViewDetails
-
getViewId
-
view
-
getViewAndDigest
Returns the current view and digest. Try to find a matching digest twice (if not found on the first try) -
getView
-
getImplementation
-
isCoord
public boolean isCoord() -
isLeaving
public boolean isLeaving() -
getMembershipChangePolicy
-
setMembershipChangePolicy
-
getMergeId
-
isMergeInProgress
public boolean isMergeInProgress() -
getMerger
Only used for internal testing, don't use this method ! -
setMembershipChangePolicy
-
printMergeIdHistory
-
printPreviousMembers
-
getViewHandlerSize
public int getViewHandlerSize() -
isViewHandlerSuspended
public boolean isViewHandlerSuspended() -
dumpViewHandlerQueue
-
dumpViewHandlerHistory
-
suspendViewHandler
public void suspendViewHandler() -
resumeViewHandler
public void resumeViewHandler() -
getViewHandler
-
printPreviousViews
-
suspect
-
_getMergeId
-
setLogCollectMessages
-
getLogCollectMessages
public boolean getLogCollectMessages() -
resetStats
public void resetStats()- Overrides:
resetStatsin classProtocol
-
requiredDownServices
Description copied from class:ProtocolList of events that are required to be answered by some layer below- Overrides:
requiredDownServicesin classProtocol
-
providedDownServices
Description copied from class:ProtocolList of events that are provided to layers below (they will be handled when sent from down below)- Overrides:
providedDownServicesin classProtocol
-
setImpl
-
getImpl
-
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. -
becomeCoordinator
public void becomeCoordinator() -
becomeParticipant
public void becomeParticipant() -
becomeClient
public void becomeClient() -
haveCoordinatorRole
boolean haveCoordinatorRole() -
fixDigests
public void fixDigests() -
cancelMerge
public void cancelMerge() -
isMergeTaskRunning
public boolean isMergeTaskRunning() -
isMergeKillerRunning
public boolean isMergeKillerRunning() -
getNextView
public View getNextView(Collection<Address> joiners, Collection<Address> leavers, Collection<Address> suspected_mbrs) Computes the next view. Returns a copy that hasleaversandsuspected_mbrsremoved andjoinersadded. -
computeNewMembership
protected List<Address> computeNewMembership(List<Address> current_members, Collection<Address> joiners, Collection<Address> leavers, Collection<Address> suspects) Computes the regular membership -
computeNewMembership
Computes a merge membership -
castViewChangeAndSendJoinRsps
public void castViewChangeAndSendJoinRsps(View new_view, Digest digest, Collection<Address> expected_acks, Collection<Address> joiners, JoinRsp jr) Broadcasts the new view and digest as VIEW messages, possibly sends JOIN-RSP messages to joiners and then waits for acks from expected_acks- Parameters:
new_view- the new view (VieworMergeView)digest- the digest, can be null if new_view is not a MergeViewexpected_acks- the members from which to wait for VIEW_ACKs (self will be excluded)joiners- the list of members to which to send the join response (jr). If null, no JOIN_RSPs will be sentjr- theJoinRsp. If null (or joiners is null), no JOIN_RSPs will be sent
-
sendJoinResponses
-
sendJoinResponse
-
sendJoinResponse
-
installView
-
installView
Sets the new view and sends a VIEW_CHANGE event up and down the stack. If the view is a MergeView (subclass of View), then digest will be non-null and has to be set before installing the view. -
getCoord
-
determineCoordinator
-
determineNextCoordinator
Returns the second-in-line -
createDeltaView
-
wouldBeNewCoordinator
Checks whether the potential_new_coord would be the new coordinator (2nd in line) -
setDigest
Send down a SET_DIGEST event -
mergeDigest
Send down a MERGE_DIGEST event -
getDigest
Grabs the current digest from NAKACK{2} -
startFlush
-
startFlush
-
_startFlush
protected boolean _startFlush(View new_view, int maxAttempts, boolean resumeIfFailed, long randomFloor, long randomCeiling) -
stopFlush
void stopFlush() -
stopFlush
-
up
Description copied from class:ProtocolAn event was received from the protocol below. Usually the current protocol 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 usingdown_prot.down()or c) the event (or another event) is sent up the stack usingup_prot.up(). -
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. -
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(). -
handleProbe
Description copied from interface:DiagnosticsHandler.ProbeHandlerHandles a probe. For each key that is handled, the key and its result should be in the returned map.- Specified by:
handleProbein interfaceDiagnosticsHandler.ProbeHandler- Returns:
- A map of keys and values. A null return value is permissible.
-
supportedKeys
Description copied from interface:DiagnosticsHandler.ProbeHandlerReturns a list of supported keys- Specified by:
supportedKeysin interfaceDiagnosticsHandler.ProbeHandler
-
handle
-
initState
protected void initState() -
sendViewAck
-
createViewFromDeltaView
-
writeAddresses
-
determineFlags
-
marshal
-
marshal
-
marshal
-
marshal
-
readJoinRsp
-
readMembers
-
readViewAndDigest
-
_readViewAndDigest
public static Tuple<View,Digest> _readViewAndDigest(byte[] buffer, int offset, int length) throws Exception - Throws:
Exception
-
readViewId
-
process
-