Package net.i2p.router.util
Class CoDelBlockingQueue<E extends CDQEntry>
- java.lang.Object
-
- java.util.AbstractCollection<E>
-
- java.util.AbstractQueue<E>
-
- java.util.concurrent.LinkedBlockingQueue<E>
-
- net.i2p.router.util.CoDelBlockingQueue<E>
-
- All Implemented Interfaces:
Serializable,Iterable<E>,Collection<E>,BlockingQueue<E>,Queue<E>
public class CoDelBlockingQueue<E extends CDQEntry> extends LinkedBlockingQueue<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
-
-
Constructor Summary
Constructors Constructor Description CoDelBlockingQueue(I2PAppContext ctx, String name, int capacity)Target 15, interval 100CoDelBlockingQueue(I2PAppContext ctx, String name, int capacity, int target, int interval)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description booleanadd(E o)voidclear()intdrainAllTo(Collection<? super E> c)Drains all, without updating stats or dropping.intdrainTo(Collection<? super E> c)Updates stats and possibly drops while draining.intdrainTo(Collection<? super E> c, int maxElements)Updates stats and possibly drops while draining.booleanisBacklogged()Has the head of the queue been waiting too long, or is the queue almost full?booleanoffer(E o)booleanoffer(E o, long timeout, TimeUnit unit)Epoll()voidput(E o)Etake()-
Methods inherited from class java.util.concurrent.LinkedBlockingQueue
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
-
-
-
-
Constructor Detail
-
CoDelBlockingQueue
public CoDelBlockingQueue(I2PAppContext ctx, String name, int capacity)
Target 15, interval 100- Parameters:
name- for stats
-
CoDelBlockingQueue
public CoDelBlockingQueue(I2PAppContext ctx, String name, int capacity, int target, int interval)
- Parameters:
target- the target max latency (ms)interval- how long above target to start dropping (ms)name- for stats- Since:
- 0.9.50
-
-
Method Detail
-
add
public boolean add(E o)
-
offer
public boolean offer(E o)
-
offer
public boolean offer(E o, long timeout, TimeUnit unit) throws InterruptedException
- Specified by:
offerin interfaceBlockingQueue<E extends CDQEntry>- Overrides:
offerin classLinkedBlockingQueue<E extends CDQEntry>- Throws:
InterruptedException
-
put
public void put(E o) throws InterruptedException
- Specified by:
putin interfaceBlockingQueue<E extends CDQEntry>- Overrides:
putin classLinkedBlockingQueue<E extends CDQEntry>- Throws:
InterruptedException
-
clear
public void clear()
- Specified by:
clearin interfaceCollection<E extends CDQEntry>- Overrides:
clearin classLinkedBlockingQueue<E extends CDQEntry>
-
take
public E take() throws InterruptedException
- Specified by:
takein interfaceBlockingQueue<E extends CDQEntry>- Overrides:
takein classLinkedBlockingQueue<E extends CDQEntry>- Throws:
InterruptedException
-
poll
public E poll()
-
drainTo
public int drainTo(Collection<? super E> c)
Updates stats and possibly drops while draining.- Specified by:
drainToin interfaceBlockingQueue<E extends CDQEntry>- Overrides:
drainToin classLinkedBlockingQueue<E extends CDQEntry>
-
drainTo
public int drainTo(Collection<? super E> c, int maxElements)
Updates stats and possibly drops while draining.- Specified by:
drainToin interfaceBlockingQueue<E extends CDQEntry>- Overrides:
drainToin classLinkedBlockingQueue<E extends CDQEntry>
-
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 almost full?
-
-