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.
becomeClient
public void becomeClient()
becomeCoordinator
public void becomeCoordinator()
becomeParticipant
public void becomeParticipant()
castViewChange
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).
checkSelfInclusion
protected boolean checkSelfInclusion(Vector mbrs)
Returns true if local_addr is member of mbrs, else false
determineCoordinator
protected Address determineCoordinator()
flush
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
getNextView
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.
handleDownEvent
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 !
- handleDownEvent in interface RpcProtocol
- boolean Defaults to true. If false, event will not be passed down the stack.
handleJoin
public boolean handleJoin(Address mbr)
handleLeave
public void handleLeave(Address mbr,
boolean suspected)
handleMerge
public View handleMerge(ViewId other_vid,
Vector other_members)
handleSuspect
public void handleSuspect(Address mbr)
handleUpEvent
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 !
- handleUpEvent in interface RpcProtocol
- boolean Defaults to true. If false, event will not be passed up the stack.
handleViewChange
public void handleViewChange(ViewId new_view,
Vector mbrs)
installView
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.
leave
public void leave(Address mbr)
makeView
public View makeView(Vector mbrs)
makeView
public View makeView(Vector mbrs,
ViewId vid)
merge
public void merge(Vector other_coords)
setImpl
public void setImpl(GmsImpl new_impl)
setProperties
public boolean setProperties(Properties props)
Setup the Protocol instance acording to the configuration string
- setProperties in interface Protocol
suspect
public void suspect(Address mbr)