Package rx.internal.util
Class BackpressureDrainManager
java.lang.Object
java.lang.Number
java.util.concurrent.atomic.AtomicLong
rx.internal.util.BackpressureDrainManager
- All Implemented Interfaces:
Serializable
,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:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic interface
Interface representing the minimal callbacks required to operate the drain part of a backpressure system. -
Field Summary
FieldsModifier and TypeFieldDescription(package private) final BackpressureDrainManager.BackpressureQueueCallback
The callbacks to manage the drain.(package private) boolean
Indicates if one is in emitting phase, guarded by this.(package private) Throwable
Indicates an error state, barrier is provided via terminated.private static final long
(package private) boolean
Indicates a terminal state. -
Constructor Summary
ConstructorsConstructorDescriptionConstructs a backpressure drain manager with 0 requestedCount, no terminal event and not emitting. -
Method Summary
Modifier and TypeMethodDescriptionvoid
drain()
Try to drain the "queued" elements and terminal events by considering the available and requested event counts.boolean
Checks if a terminal state has been reached.void
request
(long n) Request a certain maximum number of items from this Producer.void
Move into a terminal state.void
Move into a terminal state with an exception.void
Move into a terminal state and drain.void
terminateAndDrain
(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
Methods inherited from class java.lang.Number
byteValue, shortValue
-
Field Details
-
serialVersionUID
private static final long serialVersionUID- See Also:
-
emitting
boolean emittingIndicates if one is in emitting phase, guarded by this. -
terminated
volatile boolean terminatedIndicates a terminal state. -
exception
Throwable exceptionIndicates an error state, barrier is provided via terminated. -
actual
The callbacks to manage the drain.
-
-
Constructor Details
-
BackpressureDrainManager
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 Details
-
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
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
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.
-