java.lang.Object
org.jgroups.stack.Protocol
org.jgroups.protocols.FRAG
- public class FRAG
- extends org.jgroups.stack.Protocol
Fragmentation layer. Fragments messages larger than FRAG_SIZE into smaller packets.
Reassembles fragmented packets into bigger ones. The fragmentation number is prepended
to the messages as a header (and removed at the receiving side).
Each fragment is identified by (a) the sender (part of the message to which the header is appended),
(b) the fragmentation ID (which is unique per FRAG layer (monotonically increasing) and (c) the
fragement ID which ranges from 0 to number_of_fragments-1.
Requirement: lossless delivery (e.g. NAK, ACK). No requirement on ordering. Works for both unicast and
multicast messages.
- Version:
- $Id: FRAG.java,v 1.28 2005/10/28 07:42:41 belaban Exp $
|
Nested Class Summary |
(package private) static class |
FRAG.FragmentationList
A fragmentation list keeps a list of fragmentation tables
sorted by an Address ( the sender ). |
(package private) static class |
FRAG.FragmentationTable
Keeps track of the fragments that are received. |
| 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 |
FRAG()
|
| Methods inherited from class org.jgroups.stack.Protocol |
destroy, downThreadEnabled, dumpStats, enableStats, getDownProtocol, getDownQueue, getProperties, getUpProtocol, getUpQueue, handleSpecialDownEvent, init, isTrace, isWarn, passDown, passUp, printStats, providedDownServices, providedUpServices, receiveDownEvent, receiveUpEvent, requiredDownServices, requiredUpServices, setDownProtocol, setObserver, setPropertiesInternal, setProtocolStack, setTrace, setUpProtocol, setWarn, start, startDownHandler, startUpHandler, statsEnabled, stop, stopInternal, upThreadEnabled |
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
frag_size
private int frag_size
fragment_list
private final FRAG.FragmentationList fragment_list
curr_id
private int curr_id
bos
private final org.jgroups.util.ExposedByteArrayOutputStream bos
members
private final java.util.Vector members
name
private static final java.lang.String name
- See Also:
- Constant Field Values
num_sent_msgs
long num_sent_msgs
num_sent_frags
long num_sent_frags
num_received_msgs
long num_received_msgs
num_received_frags
long num_received_frags
FRAG
public FRAG()
getName
public java.lang.String getName()
getFragSize
public int getFragSize()
setFragSize
public void setFragSize(int s)
getNumberOfSentMessages
public long getNumberOfSentMessages()
getNumberOfSentFragments
public long getNumberOfSentFragments()
getNumberOfReceivedMessages
public long getNumberOfReceivedMessages()
getNumberOfReceivedFragments
public long getNumberOfReceivedFragments()
setProperties
public boolean setProperties(java.util.Properties props)
- Setup the Protocol instance acording to the configuration string
resetStats
public void resetStats()
down
public void down(org.jgroups.Event evt)
- Fragment a packet if larger than frag_size (add a header). Otherwise just pass down. Only
add a header if framentation is needed !
up
public void up(org.jgroups.Event evt)
- If event is a message, if it is fragmented, re-assemble fragments into big message and pass up the stack.
fragment
private void fragment(org.jgroups.Message msg)
- Send all fragments as separate messages (with same ID !).
Example:
Given the generated ID is 2344, number of fragments=3, message {dst,src,buf}
would be fragmented into:
[2344,3,0]{dst,src,buf1},
[2344,3,1]{dst,src,buf2} and
[2344,3,2]{dst,src,buf3}
unfragment
private void unfragment(org.jgroups.Message msg)
- 1. Get all the fragment buffers
2. When all are received -> Assemble them into one big buffer
3. Read headers and byte buffer from big buffer
4. Set headers and buffer in msg
5. Pass msg up the stack
handleConfigEvent
void handleConfigEvent(java.util.HashMap map)