Package net.i2p.router.util
Class CoDelPriorityBlockingQueue<E extends CDPQEntry>
- java.lang.Object
-
- java.util.AbstractCollection<E>
-
- java.util.AbstractQueue<E>
-
- java.util.concurrent.PriorityBlockingQueue<E>
-
- net.i2p.router.util.PriBlockingQueue<E>
-
- net.i2p.router.util.CoDelPriorityBlockingQueue<E>
-
- All Implemented Interfaces:
Serializable
,Iterable<E>
,Collection<E>
,BlockingQueue<E>
,Queue<E>
public class CoDelPriorityBlockingQueue<E extends CDPQEntry> extends PriBlockingQueue<E>
CoDel implementation of Active Queue Management. Ref: http://queue.acm.org/detail.cfm?id=2209336 Ref: http://queue.acm.org/appendices/codel.html Code and comments are directly from appendix above, apparently public domain. Input: add(), offer(), and put() are overridden to add a timestamp. Output : take(), poll(), and drainTo() are overridden to implement AQM and drop entries if necessary. peek(), and remove() are NOT overridden, and do NOT implement AQM or update stats.- Since:
- 0.9.3
- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description (package private) static AtomicLong
__id
debuggingstatic int
DONT_DROP_PRIORITY
if priority is >= this, never dropstatic int
MIN_PRIORITY
-
Fields inherited from class net.i2p.router.util.PriBlockingQueue
_context, _log, _name, BACKLOG_SIZE, MAX_SIZE, RATES
-
-
Constructor Summary
Constructors Constructor Description CoDelPriorityBlockingQueue(I2PAppContext ctx, String name, int initialCapacity)
CoDelPriorityBlockingQueue(I2PAppContext ctx, String name, int initialCapacity, int target, int interval)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
clear()
int
drainAllTo(Collection<? super E> c)
Drains all, without updating stats or dropping.int
drainTo(Collection<? super E> c)
Updates stats and possibly drops while draining.int
drainTo(Collection<? super E> c, int maxElements)
Updates stats and possibly drops while draining.boolean
isBacklogged()
Has the head of the queue been waiting too long, or is the queue too big?E
poll()
E
take()
protected void
timestamp(E o)
-
Methods inherited from class net.i2p.router.util.PriBlockingQueue
add, offer, offer, put
-
Methods inherited from class java.util.concurrent.PriorityBlockingQueue
comparator, contains, forEach, iterator, peek, poll, remainingCapacity, remove, removeAll, removeIf, retainAll, size, spliterator, toArray, toArray, toString
-
Methods inherited from class java.util.AbstractQueue
addAll, element, remove
-
Methods inherited from class java.util.AbstractCollection
containsAll, isEmpty
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface java.util.Collection
addAll, containsAll, equals, hashCode, isEmpty, parallelStream, stream, toArray
-
-
-
-
Field Detail
-
__id
static final AtomicLong __id
debugging
-
MIN_PRIORITY
public static final int MIN_PRIORITY
- See Also:
- Constant Field Values
-
DONT_DROP_PRIORITY
public static final int DONT_DROP_PRIORITY
if priority is >= this, never drop- See Also:
- Constant Field Values
-
-
Constructor Detail
-
CoDelPriorityBlockingQueue
public CoDelPriorityBlockingQueue(I2PAppContext ctx, String name, int initialCapacity)
- Parameters:
name
- for stats
-
CoDelPriorityBlockingQueue
public CoDelPriorityBlockingQueue(I2PAppContext ctx, String name, int initialCapacity, int target, int interval)
- Parameters:
name
- for stats
-
-
Method Detail
-
clear
public void clear()
- Specified by:
clear
in interfaceCollection<E extends CDPQEntry>
- Overrides:
clear
in classPriorityBlockingQueue<E extends CDPQEntry>
-
take
public E take() throws InterruptedException
- Specified by:
take
in interfaceBlockingQueue<E extends CDPQEntry>
- Overrides:
take
in classPriorityBlockingQueue<E extends CDPQEntry>
- Throws:
InterruptedException
-
poll
public E poll()
-
drainTo
public int drainTo(Collection<? super E> c)
Updates stats and possibly drops while draining.- Specified by:
drainTo
in interfaceBlockingQueue<E extends CDPQEntry>
- Overrides:
drainTo
in classPriorityBlockingQueue<E extends CDPQEntry>
-
drainTo
public int drainTo(Collection<? super E> c, int maxElements)
Updates stats and possibly drops while draining.- Specified by:
drainTo
in interfaceBlockingQueue<E extends CDPQEntry>
- Overrides:
drainTo
in classPriorityBlockingQueue<E extends CDPQEntry>
-
drainAllTo
public int drainAllTo(Collection<? super E> c)
Drains all, without updating stats or dropping.
-
isBacklogged
public boolean isBacklogged()
Has the head of the queue been waiting too long, or is the queue too big?- Overrides:
isBacklogged
in classPriBlockingQueue<E extends CDPQEntry>
-
timestamp
protected void timestamp(E o)
- Overrides:
timestamp
in classPriBlockingQueue<E extends CDPQEntry>
-
-