public final class BackpressureDrainManager extends AtomicLong implements Producer
History: 1.1.0 - experimental
Modifier and Type | Class and Description |
---|---|
static interface |
BackpressureDrainManager.BackpressureQueueCallback
Interface representing the minimal callbacks required
to operate the drain part of a backpressure system.
|
Constructor and Description |
---|
BackpressureDrainManager(BackpressureDrainManager.BackpressureQueueCallback actual)
Constructs a backpressure drain manager with 0 requestedCount,
no terminal event and not emitting.
|
Modifier and Type | Method and Description |
---|---|
void |
drain()
Try to drain the "queued" elements and terminal events
by considering the available and requested event counts.
|
boolean |
isTerminated()
Checks if a terminal state has been reached.
|
void |
request(long n)
Request a certain maximum number of items from this Producer.
|
void |
terminate()
Move into a terminal state.
|
void |
terminate(Throwable error)
Move into a terminal state with an exception.
|
void |
terminateAndDrain()
Move into a terminal state and drain.
|
void |
terminateAndDrain(Throwable error)
Move into a terminal state with an exception and drain.
|
accumulateAndGet, addAndGet, compareAndSet, decrementAndGet, doubleValue, floatValue, get, getAndAccumulate, getAndAdd, getAndDecrement, getAndIncrement, getAndSet, getAndUpdate, incrementAndGet, intValue, lazySet, longValue, set, toString, updateAndGet, weakCompareAndSet
byteValue, shortValue
public BackpressureDrainManager(BackpressureDrainManager.BackpressureQueueCallback actual)
actual
- he queue callback to check for new element availabilitypublic boolean isTerminated()
public void terminate()
public void terminate(Throwable error)
Serialized access is expected with respect to element emission.
error
- the exception to deliverpublic void terminateAndDrain()
public void terminateAndDrain(Throwable error)
Serialized access is expected with respect to element emission.
error
- the exception to deliverpublic void request(long n)
Producer
Long.MAX_VALUE
to this method.
Requests are additive but if a sequence of requests totals more than Long.MAX_VALUE
then
Long.MAX_VALUE
requests will be actioned and the extras may be ignored. Arriving at
Long.MAX_VALUE
by addition of requests cannot be assumed to disable backpressure. For example,
the code below may result in Long.MAX_VALUE
requests being actioned only.
request(100); request(Long.MAX_VALUE-1);
public void drain()
Copyright © 2017. All rights reserved.