org.jgroups.protocols

Class FLOW_CONTROL

Implemented Interfaces:
Runnable, RequestHandler

public class FLOW_CONTROL
extends MessageProtocol
implements Runnable

FLOW_CONTROL provides end-end congestion control and flow control. Attempts to maximize through put, by minimizing the possible block times(Forward flow control). Initially, sender starts with a smaller window size W and large expected RTT grpRTT. Sender also keeps a margin in the window size. When the margin is hit, insted of waiting for the window size to be exhausted, sender multicasts a FLOW_CONTROL info request message. If the window size is exhausted before the responses are received, send will be blocked. FCInfo(flow control info) from all the receivers is gathered at the sender, and current RTT is computed. If the current RTT is greater than estimated RTT window size and margin are reduced, otherwise they are increased.

Horizontal interaction is initiated by the sender with the other group members.

Note: A reliable transport layer is required for this protocol to function properly. With little effort this can be made completely independent.

Author:
Ananda Bollu
To do:
Handle view changes (e.g., members {A,B,C}, blocked on C, and C crashes --> unblock).
Also block on down() instead of sending BLOCK_SEND.

Field Summary

Fields inherited from class org.jgroups.stack.MessageProtocol

_corr, members

Fields inherited from class org.jgroups.stack.Protocol

down_handler, down_prot, down_queue, down_thread, down_thread_prio, log, observer, props, stack, stats, trace, up_handler, up_prot, up_queue, up_thread, up_thread_prio, warn

Constructor Summary

FLOW_CONTROL()

Method Summary

String
getName()
Object
handle(Message req)
Called when a request for this protocol layer is received.
boolean
handleDownEvent(Event evt)
If Event.MSG type is received count is incremented by one, and message is passed to the down_prot.
boolean
handleUpEvent(Event evt)
If Event.MSG type is received message, number of received messages from the sender is incremented.
void
run()
FCInfo request must be submitted in a different thread.
boolean
setProperties(Properties props)
Following parameters can be optionally supplied:
  • window size cap - int Limits the window size to a reasonable value.

Methods inherited from class org.jgroups.stack.MessageProtocol

castMessage, down, handle, handleDownEvent, handleUpEvent, sendMessage, start, stop, up, updateView

Methods inherited from class org.jgroups.stack.Protocol

destroy, down, downThreadEnabled, dumpStats, enableStats, getDownProtocol, getDownQueue, getName, getProperties, getUpProtocol, getUpQueue, handleSpecialDownEvent, init, isTrace, isWarn, passDown, passUp, printStats, providedDownServices, providedUpServices, receiveDownEvent, receiveUpEvent, requiredDownServices, requiredUpServices, resetStats, setDownProtocol, setObserver, setProperties, setPropertiesInternal, setProtocolStack, setTrace, setUpProtocol, setWarn, start, startDownHandler, startUpHandler, statsEnabled, stop, stopInternal, up, upThreadEnabled

Constructor Details

FLOW_CONTROL

public FLOW_CONTROL()

Method Details

getName

public String getName()
Overrides:
getName in interface Protocol

handle

public Object handle(Message req)
Called when a request for this protocol layer is received. Processes and return value is sent back in the reply. FLOW_CONTROL protocol of all members gets this message(including sender?)
Specified by:
handle in interface RequestHandler
Overrides:
handle in interface MessageProtocol
Returns:
Object containing FC information for sender with senderID. Callback. Called when a request for this protocol layer is received.

handleDownEvent

public boolean handleDownEvent(Event evt)
If Event.MSG type is received count is incremented by one, and message is passed to the down_prot. At some point, based on the algorithm(FLOW_CONTROL protocol definition) data collection sequence is started. This is done by each member in SENDER role when _numMSGsSentThisPeriod hits the margin. Before rsp arrives only _fwdMarginSize number of messages can be sent, and then sender will be blocked.
Overrides:
handleDownEvent in interface MessageProtocol

handleUpEvent

public boolean handleUpEvent(Event evt)
If Event.MSG type is received message, number of received messages from the sender is incremented. And the message is passed up the stack.
Overrides:
handleUpEvent in interface MessageProtocol

run

public void run()
FCInfo request must be submitted in a different thread. handleDownEvent() can still be called to send messages while waiting for FCInfo from receivers. usually takes RTT.

setProperties

public boolean setProperties(Properties props)
Following parameters can be optionally supplied:
  • window size cap - int Limits the window size to a reasonable value.
  • window size - int these many number of messages are sent before a block could happen
  • forward margin -int a request for flow control information is sent when remaining window size hits this margin
  • RTT weight -double Max RTT in the group is calculated during each Flow control request. lower number assigns higher weight to current RTT in estimating RTT.
  • window size reduction factor -double When current RTT is greater than estimated RTT current window size is reduced by this multiple.
  • window size expansion factor -double When current RTT is less than estimated RTT window is incremented by this multiple.
Overrides:
setProperties in interface Protocol

Copyright B) 1998-2005 Bela Ban. All Rights Reserved.