K
- the type of the Map entry keysV
- the type of the Map entry valuesP
- the type of the intermediate result during the parallel stageR
- the type of the value returned by the StreamingAggregatorpublic abstract class AbstractAsynchronousAggregator<K,V,P,R> extends AsynchronousAgent<R> implements InvocableMap.EntryAggregator<K,V,R>
AsynchronousAggregator
Modifier and Type | Field and Description |
---|---|
protected InvocableMap.StreamingAggregator<K,V,P,R> |
m_aggregator
The underlying aggregator.
|
m_control, m_iOrderId
Modifier | Constructor and Description |
---|---|
protected |
AbstractAsynchronousAggregator(InvocableMap.StreamingAggregator<K,V,P,R> aggregator, int iUnitOrderId)
Construct an AsynchronousAggregator for a given streaming aggregator.
|
Modifier and Type | Method and Description |
---|---|
R |
aggregate(Set<? extends InvocableMap.Entry<? extends K,? extends V>> setEntries)
Not supported.
|
InvocableMap.StreamingAggregator<K,V,P,R> |
getAggregator()
Return the underlying streaming aggregator.
|
int |
getUnitOfOrderId()
Return a unit-of-order id associated with this aggregator.
|
abstract void |
onComplete()
Called after this asynchronous aggregator has been notified about all possible partial results or failures and no more are forthcoming.
|
abstract void |
onException(Throwable eReason)
Called if the operation failed for any reason.
|
abstract void |
onResult(P result)
Called when there is a partial result of the asynchronous execution.
|
bind, cancel, checkBacklog, complete, completeExceptionally, drainBacklog, flush, get, get, getCompletableFuture, getException, getResult, isCancelled, isCompletedExceptionally, isDone
protected InvocableMap.StreamingAggregator<K,V,P,R> m_aggregator
protected AbstractAsynchronousAggregator(InvocableMap.StreamingAggregator<K,V,P,R> aggregator, int iUnitOrderId)
aggregator
- the underlying streaming aggregatoriUnitOrderId
- the unit-of-order id for this aggregatorpublic abstract void onResult(P result)
For a given request, calls to this method and onException(java.lang.Throwable)
may come concurrently.
For ordering guarantees across different aggregator invocations see getUnitOfOrderId()
.
Note: Overriding implementations of this method must be non-blocking.
result
- the partial result holderpublic abstract void onComplete()
As long as this aggregator was submitted to any of InvocableMap
's methods, this method is guaranteed to be called once and only once.
Possible call back sequences are:
cache.aggregate ... onResult onComplete cache.aggregate ... onException onComplete cache.aggregate ... onResult onException onException onResult onCompleteFor ordering guarantees across processors see
getUnitOfOrderId()
.
Note:
Overriding implementations of this method must be non-blocking.
If the StreamingAggregator signaled to short-circuit the aggregation while combining partial results
, onComplete() could be called before all the results are received.
public abstract void onException(Throwable eReason)
For a given request, calls to this method and onResult(P)
may come concurrently.
Note: Overriding implementations of this method must be non-blocking.
eReason
- the reason of failurepublic int getUnitOfOrderId()
If two consecutive "aggregate" calls made using AsynchronousAggregators
with the same order id and involve the same key set, then the corresponding execution
and calls to onResult(P)
are going to happen in the exact same order.
Note 1: the ordering guarantee is respected between AbstractAsynchronousAggregator
s and AsynchronousProcessor
s with the same unit-of-order id;
Note 2: there is no ordering guarantee between asynchronous and synchronous operations.
getUnitOfOrderId
in class AsynchronousAgent<R>
getUnitOfOrderId()
, AbstractAsynchronousProcessor.getUnitOfOrderId()
public InvocableMap.StreamingAggregator<K,V,P,R> getAggregator()
public R aggregate(Set<? extends InvocableMap.Entry<? extends K,? extends V>> setEntries)
aggregate
in interface InvocableMap.EntryAggregator<K,V,R>
setEntries
- a Set of read-only InvocableMap.Entry objects to aggregate