org.jgroups.stack

Class AckSenderWindow

Implemented Interfaces:
Retransmitter.RetransmitCommand

public class AckSenderWindow
extends java.lang.Object
implements Retransmitter.RetransmitCommand

ACK-based sliding window for a sender. Messages are added to the window keyed by seqno When an ACK is received, the corresponding message is removed. The Retransmitter continously iterates over the entries in the hashmap, retransmitting messages based on their creation time and an (increasing) timeout. When there are no more messages in the retransmission table left, the thread terminates. It will be re-activated when a new entry is added to the retransmission table.
Author:
Bela Ban

Nested Class Summary

static interface
AckSenderWindow.RetransmitCommand

Constructor Summary

AckSenderWindow(AckSenderWindow.RetransmitCommand com)
Creates a new instance.
AckSenderWindow(AckSenderWindow.RetransmitCommand com, long[] interval)
AckSenderWindow(AckSenderWindow.RetransmitCommand com, long[] interval, TimeScheduler sched)

Method Summary

void
ack(long seqno)
Removes the message from msgs, removing them also from retransmission.
void
add(long seqno, Message msg)
Adds a new message to the retransmission table.
static void
main(String[] args)
String
printDetails()
void
reset()
void
retransmit(long first_seqno, long last_seqno, Address sender)
int
size()
String
toString()

Constructor Details

AckSenderWindow

public AckSenderWindow(AckSenderWindow.RetransmitCommand com)
Creates a new instance. Thre retransmission thread has to be started separately with start().
Parameters:
com - If not null, its method retransmit() will be called when a message needs to be retransmitted (called by the Retransmitter).

AckSenderWindow

public AckSenderWindow(AckSenderWindow.RetransmitCommand com,
                       long[] interval)

AckSenderWindow

public AckSenderWindow(AckSenderWindow.RetransmitCommand com,
                       long[] interval,
                       TimeScheduler sched)

Method Details

ack

public void ack(long seqno)
Removes the message from msgs, removing them also from retransmission. If sliding window protocol is used, and was queueing, check whether we can resume adding elements. Add all elements. If this goes above window_size, stop adding and back to queueing. Else set queueing to false.

add

public void add(long seqno,
                Message msg)
Adds a new message to the retransmission table. If the message won't have received an ack within a certain time frame, the retransmission thread will retransmit the message to the receiver. If a sliding window protocol is used, we only add up to window_size messages. If the table is full, we add all new messages to a queue. Those will only be added once the table drains below a certain threshold (min_threshold)

main

public static void main(String[] args)

printDetails

public String printDetails()

reset

public void reset()

retransmit

public void retransmit(long first_seqno,
                       long last_seqno,
                       Address sender)
Specified by:
retransmit in interface Retransmitter.RetransmitCommand

size

public int size()

toString

public String toString()

Copyright B) 1998-2005 Bela Ban. All Rights Reserved.