| org.jgroups.stack.RpcProtocol org.jgroups.protocols.GMS
GMS | public class GMS extends RpcProtocol implements Runnable(Code) | | 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 |
Constructor Summary | |
public | GMS() |
Method Summary | |
public void | becomeClient() | public void | becomeCoordinator() | public void | becomeParticipant() | public void | castViewChange(Vector new_mbrs, Vector old_mbrs, Vector suspected_mbrs) Compute a new view, given the current view, the new members and the suspected/left
members. | boolean | checkForViewEnforcer(Protocol up_protocol) | protected boolean | checkSelfInclusion(Vector mbrs) | Vector | computeFlushDestination(Vector suspected_mbrs) Return a copy of the current membership minus the suspected members: FLUSH request is not sent
to suspected members (because they won't respond, and not to joining members either. | protected Address | determineCoordinator() | public void | flush(Vector flush_dest, Vector suspected_mbrs) FLUSH protocol. | public String | getName() | public View | getNextView(Vector new_mbrs, Vector old_mbrs, Vector suspected_mbrs) Computes the next view. | public boolean | handleDownEvent(Event evt) Callback. | public boolean | handleJoin(Address mbr) | public void | handleLeave(Address mbr, boolean suspected) | public View | handleMerge(ViewId other_vid, Vector other_members) | public void | handleSuspect(Address mbr) | public boolean | handleUpEvent(Event evt) Callback. | public void | handleViewChange(ViewId new_view, Vector mbrs) | boolean | haveCoordinatorRole() | public void | installView(ViewId new_view, Vector mbrs) Assigns the new ltime. | public void | join(Address mbr) | public void | leave(Address mbr) | public View | makeView(Vector mbrs) | public static View | makeView(Vector mbrs, ViewId vid) | public void | merge(Vector other_coords) | public void | receiveDownEvent(Event evt) | public Vector | requiredDownServices() | public void | run() | public void | setImpl(GmsImpl new_impl) | public boolean | setProperties(Properties props) | public void | start() | public void | suspect(Address mbr) |
disable_initial_coord | boolean disable_initial_coord(Code) | | |
join_retry_timeout | public long join_retry_timeout(Code) | | |
join_timeout | public long join_timeout(Code) | | |
leave_timeout | public long leave_timeout(Code) | | |
becomeClient | public void becomeClient()(Code) | | |
becomeCoordinator | public void becomeCoordinator()(Code) | | |
becomeParticipant | public void becomeParticipant()(Code) | | |
castViewChange | public void castViewChange(Vector new_mbrs, Vector old_mbrs, Vector suspected_mbrs)(Code) | | Compute a new view, given the current view, the new members and the suspected/left
members. Run view update protocol to install a new view in all members (this involves
casting the new view to all members). The targets for FLUSH and VIEW mcasts are
computed as follows:
existing leaving suspected joining
1. FLUSH y y n n
2. new_view y n n y
3. tmp_view y y n y
(view_dest)
-
The FLUSH is only sent to the existing and leaving members (they are the only ones that might have
old messages not yet seen by the group. The suspected members would not answer anyway (because they
have failed) and the joining members have certainly no old messages.
-
The new view to be installed includes the existing members plus the joining ones and
excludes the leaving and suspected members.
-
A temporary view is sent down the stack as an event. This allows the bottom layer
(e.g. UDP or TCP) to determine the members to which to send a multicast message. Compared
to the new view, leaving members are included since they have are waiting for a
view in which they are not members any longer before they leave. So, if we did not set a
temporary view, joining members would not receive the view (signalling that they have been
joined successfully). The temporary view is essentially the current view plus the joining
members (old members are still part of the current view).
|
checkForViewEnforcer | boolean checkForViewEnforcer(Protocol up_protocol)(Code) | | |
checkSelfInclusion | protected boolean checkSelfInclusion(Vector mbrs)(Code) | | Returns true if local_addr is member of mbrs, else false
|
computeFlushDestination | Vector computeFlushDestination(Vector suspected_mbrs)(Code) | | Return a copy of the current membership minus the suspected members: FLUSH request is not sent
to suspected members (because they won't respond, and not to joining members either.
It IS sent to leaving members (before they are allowed to leave).
|
determineCoordinator | protected Address determineCoordinator()(Code) | | |
flush | public void flush(Vector flush_dest, Vector suspected_mbrs)(Code) | | FLUSH protocol.
Send to current mbrs - suspected_mbrs (not including new_mbrs, but including old_mbr)
Send TMP_VIEW event down,
this allows FLUSH/NAKACK to set membership correctly
|
getNextView | public View getNextView(Vector new_mbrs, Vector old_mbrs, Vector suspected_mbrs)(Code) | | Computes the next view. Returns a copy that has old_mbrs and
suspected_mbrs removed and new_mbrs added.
|
handleDownEvent | public boolean handleDownEvent(Event evt)(Code) | | Callback. Called by superclass when event may be handled.
Do not use PassDown in this method as the event is passed down
by default by the superclass after this method returns !
boolean Defaults to true. If false, event will not be passed down the stack. |
handleLeave | public void handleLeave(Address mbr, boolean suspected)(Code) | | |
handleUpEvent | public boolean handleUpEvent(Event evt)(Code) | | Callback. Called by superclass when event may be handled.
Do not use PassUp in this method as the event is passed up
by default by the superclass after this method returns !
boolean Defaults to true. If false, event will not be passed up the stack. |
haveCoordinatorRole | boolean haveCoordinatorRole()(Code) | | |
installView | public void installView(ViewId new_view, Vector mbrs)(Code) | | Assigns the new ltime. Installs view and view_id. Changes role to coordinator if necessary.
Sends VIEW_CHANGE event up and down the stack.
|
receiveDownEvent | public void receiveDownEvent(Event evt)(Code) | | |
requiredDownServices | public Vector requiredDownServices()(Code) | | |
setProperties | public boolean setProperties(Properties props)(Code) | | Setup the Protocol instance acording to the configuration string
|
Methods inherited from org.jgroups.stack.RpcProtocol | public Object callRemoteMethod(Address dest, String method_name, int mode, long timeout) throws TimeoutException, SuspectedException(Code)(Java Doc) public Object callRemoteMethod(Address dest, String method_name, Object[] args, Class[] types, int mode, long timeout) throws TimeoutException, SuspectedException(Code)(Java Doc) public Object callRemoteMethod(Address dest, String method_name, Object[] args, String[] signature, int mode, long timeout) throws TimeoutException, SuspectedException(Code)(Java Doc) public Object callRemoteMethod(Address dest, MethodCall method_call, int mode, long timeout) throws TimeoutException, SuspectedException(Code)(Java Doc) public RspList callRemoteMethods(Vector dests, String method_name, Object[] args, Class[] types, int mode, long timeout)(Code)(Java Doc) public RspList callRemoteMethods(Vector dests, String method_name, Object[] args, String[] signature, int mode, long timeout)(Code)(Java Doc) public RspList callRemoteMethods(Vector dests, MethodCall method_call, int mode, long timeout)(Code)(Java Doc) public String getName()(Code)(Java Doc) public Object handle(Message req)(Code)(Java Doc) public boolean handleDownEvent(Event evt)(Code)(Java Doc) public boolean handleUpEvent(Event evt)(Code)(Java Doc)
|
|
|