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 boolean
add(E o)
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 almost full?boolean
offer(E o)
boolean
offer(E o, long timeout, TimeUnit unit)
E
poll()
void
put(E o)
E
take()
-
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:
offer
in interfaceBlockingQueue<E extends CDQEntry>
- Overrides:
offer
in classLinkedBlockingQueue<E extends CDQEntry>
- Throws:
InterruptedException
-
put
public void put(E o) throws InterruptedException
- Specified by:
put
in interfaceBlockingQueue<E extends CDQEntry>
- Overrides:
put
in classLinkedBlockingQueue<E extends CDQEntry>
- Throws:
InterruptedException
-
clear
public void clear()
- Specified by:
clear
in interfaceCollection<E extends CDQEntry>
- Overrides:
clear
in classLinkedBlockingQueue<E extends CDQEntry>
-
take
public E take() throws InterruptedException
- Specified by:
take
in interfaceBlockingQueue<E extends CDQEntry>
- Overrides:
take
in 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:
drainTo
in interfaceBlockingQueue<E extends CDQEntry>
- Overrides:
drainTo
in classLinkedBlockingQueue<E extends CDQEntry>
-
drainTo
public int drainTo(Collection<? super E> c, int maxElements)
Updates stats and possibly drops while draining.- Specified by:
drainTo
in interfaceBlockingQueue<E extends CDQEntry>
- Overrides:
drainTo
in 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?
-
-