Package org.jgroups.protocols.pbcast
Class GMS
java.lang.Object
org.jgroups.stack.Protocol
org.jgroups.protocols.pbcast.GMS
- All Implemented Interfaces:
TP.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
- Author:
- Bela Ban
-
Nested Class Summary
Nested Classes -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final AckCollectorTo collect VIEW_ACKs from all membersprotected Addressprotected longprotected final Membershipprotected final AckCollectorprotected intprotected TimeSchedulerprotected Viewprotected ViewId -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected boolean_startFlush(View new_view, int maxAttempts, long randomFloor, long randomCeiling) voidvoidvoidvoidcastViewChangeWithDest(View new_view, Digest digest, JoinRsp jr, Collection<Address> newMembers) Broadcasts the new view and digest, and waits for acks from all members in the list given as argument.protected booleancheckSelfInclusion(Vector<Address> mbrs) Returns true if local_addr is member of mbrs, else falseprotected AddressAn event is to be sent down the stack.voidSends down a GET_DIGEST event and waits for the GET_DIGEST_OK response, or timeout, whichever occurs firstgetImpl()static longDeprecated.longbooleanlonglonggetNextView(Collection<Address> new_mbrs, Collection<Address> old_mbrs, Collection<Address> suspected_mbrs) Computes the next view.intintgetView()longinthandleProbe(String... keys) Handles a probe.voidinit()Called after instance has been created (null constructor) and before protocol is started.voidinstallView(View new_view) voidinstallView(View new_view, Digest digest) Sets the new view and sends a VIEW_CHANGE event up and down the stack.booleanstatic booleanisShun()Deprecated.booleanbooleanstatic ViewvoidSend down a MERGE_DIGEST eventList of events that are required to be answered by some layer below.voidvoidvoidsendJoinResponse(JoinRsp rsp, Address dest) voidSend down a SET_DIGEST eventvoidvoidsetJoinRetryTimeout(long t) Deprecated.voidsetJoinTimeout(long t) voidsetLogCollectMessages(boolean flag) voidsetMaxBundlingTime(long max_bundling_time) voidsetMergeTimeout(long timeout) voidsetPrintLocalAddr(boolean flag) voidsetPrintLocalAddress(boolean flag) voidsetShun(boolean s) Deprecated.voidsetViewAckCollectionTimeout(long view_ack_collection_timeout) voidsetViewBundling(boolean view_bundling) voidstart()This method is called on aChannel.connect(String).voidstop()This method is called on aChannel.disconnect().String[]Returns a list of supported keysvoidAn event was received from the layer below.protected booleanwouldBeNewCoordinator(Address potential_new_coord) Checks whether the potential_new_coord would be the new coordinator (2nd in line)Methods inherited from class org.jgroups.stack.Protocol
destroy, downThreadEnabled, dumpStats, enableStats, getConfigurableObjects, getDownProtocol, getId, getLevel, getName, getProperties, getProtocolStack, getSocketFactory, getThreadFactory, getTransport, getUpProtocol, getValue, isErgonomics, printStats, providedDownServices, providedUpServices, requiredUpServices, setDownProtocol, setErgonomics, setId, setLevel, setProperties, setPropertiesInternal, setProperty, setProtocolStack, setSocketFactory, setUpProtocol, setValue, setValues, statsEnabled, upThreadEnabled
-
Field Details
-
num_prev_mbrs
protected int num_prev_mbrs -
flushInvokerClass
-
local_addr
-
members
-
view
-
view_id
-
ltime
protected long ltime -
timer
-
ack_collector
To collect VIEW_ACKs from all members -
merge_ack_collector
-
-
Constructor Details
-
GMS
public GMS()
-
-
Method Details
-
getView
-
getNumberOfViews
public int getNumberOfViews() -
getLocalAddress
-
getMembers
-
getNumMembers
public int getNumMembers() -
getJoinTimeout
public long getJoinTimeout() -
setJoinTimeout
public void setJoinTimeout(long t) -
getMergeTimeout
public long getMergeTimeout() -
setMergeTimeout
public void setMergeTimeout(long timeout) -
getJoinRetryTimeout
public static long getJoinRetryTimeout()Deprecated. -
setJoinRetryTimeout
public void setJoinRetryTimeout(long t) Deprecated. -
isShun
Deprecated. -
setShun
Deprecated. -
printPreviousMembers
-
setPrintLocalAddress
public void setPrintLocalAddress(boolean flag) -
setPrintLocalAddr
public void setPrintLocalAddr(boolean flag) -
getViewAckCollectionTimeout
public long getViewAckCollectionTimeout() -
setViewAckCollectionTimeout
public void setViewAckCollectionTimeout(long view_ack_collection_timeout) -
isViewBundling
public boolean isViewBundling() -
setViewBundling
public void setViewBundling(boolean view_bundling) -
getMaxBundlingTime
public long getMaxBundlingTime() -
setMaxBundlingTime
public void setMaxBundlingTime(long max_bundling_time) -
getViewHandlerSize
public int getViewHandlerSize() -
isViewHandlerSuspended
public boolean isViewHandlerSuspended() -
dumpViewHandlerQueue
-
dumpViewHandlerHistory
-
suspendViewHandler
public void suspendViewHandler() -
resumeViewHandler
public void resumeViewHandler() -
printPreviousViews
-
isCoordinator
public boolean isCoordinator() -
getMergeId
-
setLogCollectMessages
public void setLogCollectMessages(boolean flag) -
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- Returns:
- Vector (of Integers)
-
setImpl
-
getImpl
-
init
Description 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
Description copied from class:ProtocolThis method is called on aChannel.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:
Exception- Thrown if protocol cannot be started successfully. This will cause the ProtocolStack to fail, soChannel.connect(String)will throw an exception
-
stop
public void stop()Description copied from class:ProtocolThis method is called on aChannel.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 -
becomeCoordinator
public void becomeCoordinator() -
becomeParticipant
public void becomeParticipant() -
becomeClient
public void becomeClient() -
fixDigests
public void fixDigests() -
getNextView
public View getNextView(Collection<Address> new_mbrs, Collection<Address> old_mbrs, Collection<Address> suspected_mbrs) Computes the next view. Returns a copy that hasold_mbrsandsuspected_mbrsremoved andnew_mbrsadded. -
castViewChangeWithDest
public void castViewChangeWithDest(View new_view, Digest digest, JoinRsp jr, Collection<Address> newMembers) Broadcasts the new view and digest, and waits for acks from all members in the list given as argument. If the list is null, we take the members who are part of new_view- Parameters:
new_view-digest-newMembers-
-
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. -
determineCoordinator
-
wouldBeNewCoordinator
Checks whether the potential_new_coord would be the new coordinator (2nd in line) -
checkSelfInclusion
Returns true if local_addr is member of mbrs, else false -
makeView
-
makeView
-
setDigest
Send down a SET_DIGEST event -
mergeDigest
Send down a MERGE_DIGEST event -
getDigest
Sends down a GET_DIGEST event and waits for the GET_DIGEST_OK response, or timeout, whichever occurs first -
_startFlush
-
up
Description copied from class:ProtocolAn 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 usingdown_prot.down()or c) the event (or another event) is sent up the stack usingup_prot.up(). -
down
Description copied from class:ProtocolAn 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 usingdown_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 usingup_prot.up(). -
handleProbe
Description copied from interface:TP.ProbeHandlerHandles a probe. For each key that is handled, the key and its result should be in the returned map.- Specified by:
handleProbein interfaceTP.ProbeHandler- Parameters:
keys-- Returns:
- Mapinvalid input: '<'String,String>. A map of keys and values. A null return value is permissible.
-
supportedKeys
Description copied from interface:TP.ProbeHandlerReturns a list of supported keys- Specified by:
supportedKeysin interfaceTP.ProbeHandler
-