Package rx.internal.util
Class BackpressureDrainManager
- java.lang.Object
-
- java.lang.Number
-
- java.util.concurrent.atomic.AtomicLong
-
- rx.internal.util.BackpressureDrainManager
-
- All Implemented Interfaces:
java.io.Serializable
,Producer
@Experimental public final class BackpressureDrainManager extends java.util.concurrent.atomic.AtomicLong implements Producer
Manages the producer-backpressure-consumer interplay by matching up available elements with requested elements and/or terminal events.- Since:
- 1.1.0
- See Also:
- Serialized Form
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interface
BackpressureDrainManager.BackpressureQueueCallback
Interface representing the minimal callbacks required to operate the drain part of a backpressure system.
-
Field Summary
Fields Modifier and Type Field Description (package private) BackpressureDrainManager.BackpressureQueueCallback
actual
The callbacks to manage the drain.(package private) boolean
emitting
Indicates if one is in emitting phase, guarded by this.(package private) java.lang.Throwable
exception
Indicates an error state, barrier is provided via terminated.private static long
serialVersionUID
(package private) boolean
terminated
Indicates a terminal state.
-
Constructor Summary
Constructors Constructor Description BackpressureDrainManager(BackpressureDrainManager.BackpressureQueueCallback actual)
Constructs a backpressure drain manager with 0 requestedCount, no terminal event and not emitting.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method 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(java.lang.Throwable error)
Move into a terminal state with an exception.void
terminateAndDrain()
Move into a terminal state and drain.void
terminateAndDrain(java.lang.Throwable error)
Move into a terminal state with an exception and drain.-
Methods inherited from class java.util.concurrent.atomic.AtomicLong
accumulateAndGet, addAndGet, compareAndExchange, compareAndExchangeAcquire, compareAndExchangeRelease, compareAndSet, decrementAndGet, doubleValue, floatValue, get, getAcquire, getAndAccumulate, getAndAdd, getAndDecrement, getAndIncrement, getAndSet, getAndUpdate, getOpaque, getPlain, incrementAndGet, intValue, lazySet, longValue, set, setOpaque, setPlain, setRelease, toString, updateAndGet, weakCompareAndSet, weakCompareAndSetAcquire, weakCompareAndSetPlain, weakCompareAndSetRelease, weakCompareAndSetVolatile
-
-
-
-
Field Detail
-
serialVersionUID
private static final long serialVersionUID
- See Also:
- Constant Field Values
-
emitting
boolean emitting
Indicates if one is in emitting phase, guarded by this.
-
terminated
volatile boolean terminated
Indicates a terminal state.
-
exception
java.lang.Throwable exception
Indicates an error state, barrier is provided via terminated.
-
actual
final BackpressureDrainManager.BackpressureQueueCallback actual
The callbacks to manage the drain.
-
-
Constructor Detail
-
BackpressureDrainManager
public BackpressureDrainManager(BackpressureDrainManager.BackpressureQueueCallback actual)
Constructs a backpressure drain manager with 0 requestedCount, no terminal event and not emitting.- Parameters:
actual
- he queue callback to check for new element availability
-
-
Method Detail
-
isTerminated
public boolean isTerminated()
Checks if a terminal state has been reached.- Returns:
- true if a terminal state has been reached
-
terminate
public void terminate()
Move into a terminal state. Call drain() anytime after.
-
terminate
public void terminate(java.lang.Throwable error)
Move into a terminal state with an exception. Call drain() anytime after.Serialized access is expected with respect to element emission.
- Parameters:
error
- the exception to deliver
-
terminateAndDrain
public void terminateAndDrain()
Move into a terminal state and drain.
-
terminateAndDrain
public void terminateAndDrain(java.lang.Throwable error)
Move into a terminal state with an exception and drain.Serialized access is expected with respect to element emission.
- Parameters:
error
- the exception to deliver
-
request
public void request(long n)
Description copied from interface:Producer
Request a certain maximum number of items from this Producer. This is a way of requesting backpressure. To disable backpressure, passLong.MAX_VALUE
to this method.Requests are additive but if a sequence of requests totals more than
Long.MAX_VALUE
thenLong.MAX_VALUE
requests will be actioned and the extras may be ignored. Arriving atLong.MAX_VALUE
by addition of requests cannot be assumed to disable backpressure. For example, the code below may result inLong.MAX_VALUE
requests being actioned only.request(100); request(Long.MAX_VALUE-1);
-
drain
public void drain()
Try to drain the "queued" elements and terminal events by considering the available and requested event counts.
-
-