Package org.jgroups.protocols
Class UFC
- java.lang.Object
-
- org.jgroups.stack.Protocol
-
- org.jgroups.protocols.FlowControl
-
- org.jgroups.protocols.UFC
-
- Direct Known Subclasses:
UFC_NB
public class UFC extends FlowControl
Simple flow control protocol based on a credit system. Each sender has a number of credits (bytes to send). When the credits have been exhausted, the sender blocks. Each receiver also keeps track of how many credits it has received from a sender. When credits for a sender fall below a threshold, the receiver sends more credits to the sender. Works for both unicast and multicast messages. Note that this protocol must be located towards the top of the stack, or all down_threads from JChannel to this protocol must be set to false ! This is in order to block JChannel.send()/JChannel.down().
This is the second simplified implementation of the same model. The algorithm is sketched out in doc/FlowControl.txt
Changes (Brian) April 2006:- Receivers now send credits to a sender when more than min_credits have been received (rather than when min_credits are left)
- Receivers don't send the full credits (max_credits), but rather the actual number of bytes received
- Author:
- Bela Ban
-
-
Field Summary
Fields Modifier and Type Field Description protected java.util.Map<Address,? extends Credit>
sent
Map: keys are members, values are credits left.protected static FcHeader
UFC_CREDIT_REQUEST_HDR
protected static FcHeader
UFC_REPLENISH_HDR
-
Fields inherited from class org.jgroups.protocols.FlowControl
frag_size, local_addr, max_block_time, max_block_times, max_credits, min_credits, min_threshold, num_credit_requests_received, num_credit_requests_sent, num_credit_responses_received, num_credit_responses_sent, received, running
-
Fields inherited from class org.jgroups.stack.Protocol
after_creation_hook, down_prot, ergonomics, id, log, stack, stats, up_prot
-
-
Constructor Summary
Constructors Constructor Description UFC()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected <T extends Credit>
TcreateCredit(int initial_credits)
double
getAverageTimeBlocked()
protected Header
getCreditRequestHeader()
int
getNumberOfBlockings()
protected Header
getReplenishHeader()
long
getSenderCreditsFor(Address mbr)
protected void
handleCredit(Address sender, long increase)
protected java.lang.Object
handleDownMessage(Message msg)
protected boolean
handleMulticastMessage()
Whether the protocol handles message with dest == null || dest.isMulticastAddress()protected void
handleViewChange(java.util.List<Address> mbrs)
java.lang.String
printCredits()
java.lang.String
printSenderCredits()
void
resetStats()
void
stop()
This method is called on aJChannel.disconnect()
.void
unblock()
Allows to unblock all blocked senders from an external program, e.g.-
Methods inherited from class org.jgroups.protocols.FlowControl
adjustCredit, bufferToLong, down, down, getMaxBlockTime, getMaxBlockTime, getMaxBlockTimes, getMaxCredits, getMinCredits, getMinThreshold, getNumberOfCreditRequestsReceived, getNumberOfCreditRequestsSent, getNumberOfCreditResponsesReceived, getNumberOfCreditResponsesSent, getReceiverCreditsFor, handleConfigEvent, handleCreditRequest, handleUpEvent, init, longToBuffer, maxBlockTime, maxCredits, printMap, printReceiverCredits, sendCredit, sendCreditRequest, setMaxBlockTime, setMaxBlockTimes, setMaxCredits, setMinCredits, setMinThreshold, start, up, up, up
-
Methods inherited from class org.jgroups.stack.Protocol
accept, afterCreationHook, destroy, enableStats, getConfigurableObjects, getDownProtocol, getDownServices, getId, getIdsAbove, getLevel, getLog, getName, getProtocolStack, getSocketFactory, getThreadFactory, getTransport, getUpProtocol, getUpServices, getValue, isErgonomics, level, parse, providedDownServices, providedUpServices, requiredDownServices, requiredUpServices, resetStatistics, setDownProtocol, setErgonomics, setId, setLevel, setProtocolStack, setSocketFactory, setUpProtocol, setValue, statsEnabled
-
-
-
-
Method Detail
-
printSenderCredits
public java.lang.String printSenderCredits()
- Specified by:
printSenderCredits
in classFlowControl
-
printCredits
public java.lang.String printCredits()
- Overrides:
printCredits
in classFlowControl
-
handleMulticastMessage
protected boolean handleMulticastMessage()
Description copied from class:FlowControl
Whether the protocol handles message with dest == null || dest.isMulticastAddress()- Specified by:
handleMulticastMessage
in classFlowControl
- Returns:
-
getReplenishHeader
protected Header getReplenishHeader()
- Specified by:
getReplenishHeader
in classFlowControl
-
getCreditRequestHeader
protected Header getCreditRequestHeader()
- Specified by:
getCreditRequestHeader
in classFlowControl
-
unblock
public void unblock()
Description copied from class:FlowControl
Allows to unblock all blocked senders from an external program, e.g. JMX- Overrides:
unblock
in classFlowControl
-
getSenderCreditsFor
public long getSenderCreditsFor(Address mbr)
-
getNumberOfBlockings
public int getNumberOfBlockings()
- Specified by:
getNumberOfBlockings
in classFlowControl
-
getAverageTimeBlocked
public double getAverageTimeBlocked()
- Specified by:
getAverageTimeBlocked
in classFlowControl
-
stop
public void stop()
Description copied from class:Protocol
This method is called on aJChannel.disconnect()
. Stops work (e.g. by closing multicast socket). Will be called from top to bottom. This means that at the time of the method invocation the neighbor protocol below is still working. This method will replace the STOP, STOP_OK, CLEANUP and CLEANUP_OK events. The ProtocolStack guarantees that when this method is called all messages in the down queue will have been flushed- Overrides:
stop
in classFlowControl
-
resetStats
public void resetStats()
- Overrides:
resetStats
in classFlowControl
-
handleDownMessage
protected java.lang.Object handleDownMessage(Message msg)
- Specified by:
handleDownMessage
in classFlowControl
-
handleViewChange
protected void handleViewChange(java.util.List<Address> mbrs)
- Overrides:
handleViewChange
in classFlowControl
-
handleCredit
protected void handleCredit(Address sender, long increase)
- Specified by:
handleCredit
in classFlowControl
-
createCredit
protected <T extends Credit> T createCredit(int initial_credits)
-
-