org.jgroups.protocols

Class STABLE

public class STABLE extends RpcProtocol

Computes the broadcast messages that are stable; i.e., that have been received by all members. Sends STABLE events up the stack when this is the case. Uses a probabilistic scheme to do so, as described in:
GSGC: An Efficient Gossip-Style Garbage Collection Scheme for Scalable Reliable Multicast, K. Guo et al., 1997.

The only difference is that instead of using counters for an estimation of messages received from each member, we retrieve this actual information from the NAKACK layer (which must be present for the STABLE protocol to work).

Note: the the Event.MSG call path path must be as lightweight as possible. It should not request any lock for which there is a high contention and/or long delay.

 Changes(igeorg - 2.VI.2001):
 i. Thread-safety (in RPC calls most notably on the lines of Gianluca
 Collot's bugfix)
 ii. All slow calls (RPCs, seqnos requests, etc.) placed outside locks
 iii. Removed redundant initialization in adaptation to a higher round
 iv. heard_from[this meber] is always set to true on every new round
 (i.e. on every stability bcast).
 v. Replaced gossip thread with TimeScheduler.Task
 

[[[ TODO(igeorg - 2.VI.2001) i. Faster stability convergence by better selection of gossip subsets (replace Util.pickSubset()). ii. Special mutex on the Event.MSG call path. I.e. remove synchronized(this)> with e.g. synchronized(msg_mutex). ]] TODO

Method Summary
StringgetName()
voidgossip(ViewId view_id, long gossip_round, long[] gossip_seqnos, boolean[] heard, Object sender)
Contains the highest sequence numbers as seen by sender
booleanhandleDownEvent(Event evt)
Callback.
booleanhandleUpEvent(Event evt)
Callback.
VectorrequiredUpServices()
The events expected to be handled from some layer above:
  • GET_MSGS_RECEIVED: NAKACK layer
booleansetProperties(Properties props)
Set the parameters for this layer.
voidstability(ViewId view_id, long gossip_round, long[] stability_vector, Object sender)
Contains the highest message sequence numbers (for each member) that can safely be deleted (because they have been seen by all members).
voidstart()
Start the layer: i.
voidstop()
Stop scheduling the gossip task

Method Detail

getName

public String getName()

Returns: this protocol name

gossip

public void gossip(ViewId view_id, long gossip_round, long[] gossip_seqnos, boolean[] heard, Object sender)
Contains the highest sequence numbers as seen by sender

Parameters: view_id The view ID in which the gossip was sent. Must be the same as ours, otherwise it is discarded gossip_round The round in which the gossip was sent gossip_seqnos A vector with the highest sequence numbers as seen by sender heard The sender's heard_from array. This allows us to minimize the gossip msgs for a given round as a member does not have to receive gossip msgs from each member, but members pass gossips they've received from others on in their own gossips. E.g. when a member P (of group {P,Q,R}) receives a gossip from R, its own gossip to Q might be {R,P}. Q, who hasn't received a gossip from R, will not need to receive it anymore as it is already sent by P. This simple scheme reduces the number of gossip messages needed. sender The sender of the gossip message (obviously :-))

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 !

Returns: boolean Defaults to true. If false, event will not be passed down the stack.

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 !

Returns: boolean Defaults to true. If false, event will not be passed up the stack.

requiredUpServices

public Vector requiredUpServices()
The events expected to be handled from some layer above:

Returns: a list of events expected by to be handled from some layer above

setProperties

public boolean setProperties(Properties props)
Set the parameters for this layer.

Parameters: props the list of parameters

stability

public void stability(ViewId view_id, long gossip_round, long[] stability_vector, Object sender)
Contains the highest message sequence numbers (for each member) that can safely be deleted (because they have been seen by all members).

start

public void start()
Start the layer: i. Set the gossip task scheduler ii. Reset the layer's state. iii. Start the gossiping task

stop

public void stop()
Stop scheduling the gossip task
Copyright ? 1998-2005 Bela Ban. All Rights Reserved.