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 interfaceInterface representing the minimal callbacks required to operate the drain part of a backpressure system. -
Field Summary
FieldsModifier and TypeFieldDescription(package private) final BackpressureDrainManager.BackpressureQueueCallbackThe callbacks to manage the drain.(package private) booleanIndicates if one is in emitting phase, guarded by this.(package private) ThrowableIndicates an error state, barrier is provided via terminated.private static final long(package private) booleanIndicates a terminal state. -
Constructor Summary
ConstructorsConstructorDescriptionConstructs a backpressure drain manager with 0 requestedCount, no terminal event and not emitting. -
Method Summary
Modifier and TypeMethodDescriptionvoiddrain()Try to drain the "queued" elements and terminal events by considering the available and requested event counts.booleanChecks if a terminal state has been reached.voidrequest(long n) Request a certain maximum number of items from this Producer.voidMove into a terminal state.voidMove into a terminal state with an exception.voidMove into a terminal state and drain.voidterminateAndDrain(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, weakCompareAndSetVolatileMethods 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:ProducerRequest a certain maximum number of items from this Producer. This is a way of requesting backpressure. To disable backpressure, passLong.MAX_VALUEto this method.Requests are additive but if a sequence of requests totals more than
Long.MAX_VALUEthenLong.MAX_VALUErequests will be actioned and the extras may be ignored. Arriving atLong.MAX_VALUEby addition of requests cannot be assumed to disable backpressure. For example, the code below may result inLong.MAX_VALUErequests 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.
-