Package org.jgroups.protocols
Class UFC
- java.lang.Object
-
- org.jgroups.stack.Protocol
-
- org.jgroups.protocols.FlowControl
-
- org.jgroups.protocols.UFC
-
- All Implemented Interfaces:
Lifecycle
- 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>sentMap: keys are members, values are credits left.protected static FcHeaderUFC_CREDIT_REQUEST_HDRprotected static FcHeaderUFC_REPLENISH_HDR-
Fields inherited from class org.jgroups.protocols.FlowControl
frag_size, max_block_time, max_credits, min_credits, min_threshold, num_credit_requests_received, num_credit_requests_sent, num_credit_responses_received, num_credit_responses_sent, num_msgs_dropped, received, running
-
Fields inherited from class org.jgroups.stack.Protocol
after_creation_hook, down_prot, ergonomics, id, local_addr, log, policies, 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)doublegetAverageTimeBlocked()protected HeadergetCreditRequestHeader()intgetNumberOfBlockings()protected HeadergetReplenishHeader()longgetSenderCreditsFor(Address mbr)protected voidhandleCredit(Address sender, long increase)protected java.lang.ObjecthandleDownMessage(Message msg, int length)protected booleanhandleMulticastMessage()Whether the protocol handles message with dest == null || dest.isMulticastAddress()protected voidhandleViewChange(java.util.List<Address> mbrs)java.lang.StringprintCredits()java.lang.StringprintSenderCredits()voidresetStats()voidstop()Called on aJChannel.disconnect(); stops work (e.g.voidunblock()Allows to unblock all blocked senders from an external program, e.g.-
Methods inherited from class org.jgroups.protocols.FlowControl
adjustCredit, down, down, getMaxBlockTime, getMaxCredits, getMinCredits, getMinThreshold, getNumberOfCreditRequestsReceived, getNumberOfCreditRequestsSent, getNumberOfCreditResponsesReceived, getNumberOfCreditResponsesSent, getReceiverCreditsFor, handleConfigEvent, handleCreditRequest, handleUpEvent, init, printMap, printReceiverCredits, sendCredit, sendCreditRequest, setMaxBlockTime, setMaxCredits, setMinCredits, setMinThreshold, start, up, up, up
-
Methods inherited from class org.jgroups.stack.Protocol
accept, addPolicy, addr, addr, afterCreationHook, destroy, down, enableStats, getAddress, getComponents, getDownProtocol, getDownServices, getId, getIdsAbove, getLevel, getLog, getName, getPolicies, getProtocolStack, getSocketFactory, getThreadFactory, getTransport, getUpProtocol, getUpServices, getValue, isErgonomics, level, parse, policies, providedDownServices, providedUpServices, removePolicy, requiredDownServices, requiredUpServices, resetStatistics, setAddress, setDownProtocol, setErgonomics, setId, setLevel, setPolicies, setProtocolStack, setSocketFactory, setUpProtocol, setValue, statsEnabled, toString
-
-
-
-
Method Detail
-
printSenderCredits
public java.lang.String printSenderCredits()
- Specified by:
printSenderCreditsin classFlowControl
-
printCredits
public java.lang.String printCredits()
- Overrides:
printCreditsin classFlowControl
-
handleMulticastMessage
protected boolean handleMulticastMessage()
Description copied from class:FlowControlWhether the protocol handles message with dest == null || dest.isMulticastAddress()- Specified by:
handleMulticastMessagein classFlowControl
-
getReplenishHeader
protected Header getReplenishHeader()
- Specified by:
getReplenishHeaderin classFlowControl
-
getCreditRequestHeader
protected Header getCreditRequestHeader()
- Specified by:
getCreditRequestHeaderin classFlowControl
-
unblock
public void unblock()
Description copied from class:FlowControlAllows to unblock all blocked senders from an external program, e.g. JMX- Overrides:
unblockin classFlowControl
-
getSenderCreditsFor
public long getSenderCreditsFor(Address mbr)
-
getNumberOfBlockings
public int getNumberOfBlockings()
- Specified by:
getNumberOfBlockingsin classFlowControl
-
getAverageTimeBlocked
public double getAverageTimeBlocked()
- Specified by:
getAverageTimeBlockedin classFlowControl
-
stop
public void stop()
Description copied from class:ProtocolCalled on aJChannel.disconnect(); stops work (e.g. by closing multicast socket). Will be called from top to bottom.- Specified by:
stopin interfaceLifecycle- Overrides:
stopin classFlowControl
-
resetStats
public void resetStats()
- Overrides:
resetStatsin classFlowControl
-
handleDownMessage
protected java.lang.Object handleDownMessage(Message msg, int length)
- Specified by:
handleDownMessagein classFlowControl
-
handleViewChange
protected void handleViewChange(java.util.List<Address> mbrs)
- Overrides:
handleViewChangein classFlowControl
-
handleCredit
protected void handleCredit(Address sender, long increase)
- Specified by:
handleCreditin classFlowControl
-
createCredit
protected <T extends Credit> T createCredit(int initial_credits)
-
-