Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

org.jgroups.protocols
Class FRAG  view FRAG download FRAG.java

java.lang.Object
  extended byorg.jgroups.stack.Protocol
      extended byorg.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.
 
Field Summary
private  org.jgroups.util.ExposedByteArrayOutputStream bos
           
private  int curr_id
           
private  int frag_size
           
private  FRAG.FragmentationList fragment_list
           
private  java.util.Vector members
           
private static java.lang.String name
           
(package private)  long num_received_frags
           
(package private)  long num_received_msgs
           
(package private)  long num_sent_frags
           
(package private)  long num_sent_msgs
           
 
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()
           
 
Method Summary
 void down(org.jgroups.Event evt)
          Fragment a packet if larger than frag_size (add a header).
private  void fragment(org.jgroups.Message msg)
          Send all fragments as separate messages (with same ID !).
 int getFragSize()
           
 java.lang.String getName()
           
 long getNumberOfReceivedFragments()
           
 long getNumberOfReceivedMessages()
           
 long getNumberOfSentFragments()
           
 long getNumberOfSentMessages()
           
(package private)  void handleConfigEvent(java.util.HashMap map)
           
 void resetStats()
           
 void setFragSize(int s)
           
 boolean setProperties(java.util.Properties props)
          Setup the Protocol instance acording to the configuration string
private  void unfragment(org.jgroups.Message msg)
          1.
 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.
 
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
 

Field Detail

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
Constructor Detail

FRAG

public FRAG()
Method Detail

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)