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

Quick Search    Search Deep

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

java.lang.Object
  extended byorg.jgroups.stack.Protocol
      extended byorg.jgroups.protocols.FRAG2

public class FRAG2
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 FRAG2 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.
Compared to FRAG, this protocol does not need to serialize the message in order to break it into smaller fragments: it looks only at the message's buffer, which is a byte[] array anyway. We assume that the size addition for headers and src and dest address is minimal when the transport finally has to serialize the message, so we add a constant (1000 bytes).

Version:
$Id: FRAG2.java,v 1.20 2005/08/11 12:43:47 belaban Exp $

Nested Class Summary
(package private) static class FRAG2.FragmentationList
          A fragmentation list keeps a list of fragmentation tables sorted by an Address ( the sender ).
(package private) static class FRAG2.FragmentationTable
          Keeps track of the fragments that are received.
 
Field Summary
private  int curr_id
           
(package private)  int frag_size
          The max number of bytes in a message.
private  FRAG2.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
           
(package private)  int overhead
          Number of bytes that we think the headers plus src and dest will take up when message is serialized by transport.
 
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
FRAG2()
           
 
Method Summary
 void down(org.jgroups.Event evt)
          Fragment a packet if larger than frag_size (add a header).
(package private)  void fragment(org.jgroups.Message msg)
          Send all fragments as separate messages (with same ID !).
 int getFragSize()
           
 java.lang.String getName()
           
(package private)  int getNextId()
           
 long getNumberOfReceivedFragments()
           
 long getNumberOfReceivedMessages()
           
 long getNumberOfSentFragments()
           
 long getNumberOfSentMessages()
           
 int getOverhead()
           
(package private)  void handleConfigEvent(java.util.HashMap map)
           
 void resetStats()
           
 void setFragSize(int s)
           
 void setOverhead(int o)
           
 boolean setProperties(java.util.Properties props)
          Setup the Protocol instance acording to the configuration string
(package 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

int frag_size
The max number of bytes in a message. If a message's buffer is bigger, it will be fragmented


overhead

int overhead
Number of bytes that we think the headers plus src and dest will take up when message is serialized by transport. This will be subtracted from frag_size


fragment_list

private final FRAG2.FragmentationList fragment_list

curr_id

private int curr_id

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

FRAG2

public FRAG2()
Method Detail

getName

public final java.lang.String getName()

getFragSize

public int getFragSize()

setFragSize

public void setFragSize(int s)

getOverhead

public int getOverhead()

setOverhead

public void setOverhead(int o)

getNumberOfSentMessages

public long getNumberOfSentMessages()

getNumberOfSentFragments

public long getNumberOfSentFragments()

getNumberOfReceivedMessages

public long getNumberOfReceivedMessages()

getNumberOfReceivedFragments

public long getNumberOfReceivedFragments()

getNextId

int getNextId()

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

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

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)