org.jgroups.protocols
Class GMS
public
class
GMS
extends RpcProtocol
implements Runnable
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
Method Summary |
void | becomeClient() |
void | becomeCoordinator() |
void | becomeParticipant() |
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. |
protected boolean | checkSelfInclusion(Vector mbrs)
Returns true if local_addr is member of mbrs, else false |
protected Address | determineCoordinator() |
void | flush(Vector flush_dest, Vector suspected_mbrs)
FLUSH protocol.
|
String | getName() |
View | getNextView(Vector new_mbrs, Vector old_mbrs, Vector suspected_mbrs)
Computes the next view. |
boolean | handleDownEvent(Event evt)
Callback. |
boolean | handleJoin(Address mbr) |
void | handleLeave(Address mbr, boolean suspected) |
View | handleMerge(ViewId other_vid, Vector other_members) |
void | handleSuspect(Address mbr) |
boolean | handleUpEvent(Event evt)
Callback. |
void | handleViewChange(ViewId new_view, Vector mbrs) |
void | installView(ViewId new_view, Vector mbrs)
Assigns the new ltime. |
void | join(Address mbr) |
void | leave(Address mbr) |
View | makeView(Vector mbrs) |
static View | makeView(Vector mbrs, ViewId vid) |
void | merge(Vector other_coords) |
void | receiveDownEvent(Event evt) |
Vector | requiredDownServices() |
void | run() |
void | setImpl(GmsImpl new_impl) |
boolean | setProperties(Properties props)
Setup the Protocol instance acording to the configuration string |
void | start() |
void | suspect(Address mbr) |
public String group_addr
public final Object impl_mutex
public long join_retry_timeout
public long join_timeout
public long leave_timeout
public long ltime
public static final String name
public final Object view_mutex
public GMS()
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. 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).
protected boolean checkSelfInclusion(Vector mbrs)
Returns true if local_addr is member of mbrs, else false
protected
Address determineCoordinator()
public void flush(Vector flush_dest, Vector suspected_mbrs)
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
public String getName()
public
View getNextView(Vector new_mbrs, Vector old_mbrs, Vector suspected_mbrs)
Computes the next view. Returns a copy that has old_mbrs
and
suspected_mbrs
removed and new_mbrs
added.
public boolean handleDownEvent(
Event evt)
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 !
Returns: boolean Defaults to true. If false, event will not be passed down the stack.
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. 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 !
Returns: boolean Defaults to true. If false, event will not be passed up the stack.
public void handleViewChange(
ViewId new_view, Vector mbrs)
public void installView(
ViewId new_view, Vector mbrs)
Assigns the new ltime. Installs view and view_id. Changes role to coordinator if necessary.
Sends VIEW_CHANGE event up and down the stack.
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)
Setup the Protocol instance acording to the configuration string
public void start()
Copyright ? 1998-2005 Bela Ban. All Rights Reserved.