public class BatcherImpl<ElementT,ElementResultT,RequestT,ResponseT> implements Batcher<ElementT,ElementResultT>
Queues up the elements until #flush() is called; once batching is over, returned future resolves.
This class is not thread-safe, and expects to be used from a single thread.
Implements
com.google.api.gax.batching.Batcher<ElementT,ElementResultT>Type Parameters |
|
---|---|
Name | Description |
ElementT |
|
ElementResultT |
|
RequestT |
|
ResponseT |
Constructors
BatcherImpl(BatchingDescriptor<ElementT,ElementResultT,RequestT,ResponseT> batchingDescriptor, UnaryCallable<RequestT,ResponseT> unaryCallable, RequestT prototype, BatchingSettings batchingSettings, ScheduledExecutorService executor) (deprecated)
public BatcherImpl(BatchingDescriptor<ElementT,ElementResultT,RequestT,ResponseT> batchingDescriptor, UnaryCallable<RequestT,ResponseT> unaryCallable, RequestT prototype, BatchingSettings batchingSettings, ScheduledExecutorService executor)
Deprecated. Please instantiate the Batcher with FlowController and ApiCallContext
Parameters | |
---|---|
Name | Description |
batchingDescriptor |
BatchingDescriptor<ElementT,ElementResultT,RequestT,ResponseT> a BatchingDescriptor for transforming individual elements into wrappers request and response |
unaryCallable |
UnaryCallable<RequestT,ResponseT> a UnaryCallable object |
prototype |
RequestT a RequestT object |
batchingSettings |
BatchingSettings a BatchingSettings with configuration of thresholds |
executor |
ScheduledExecutorService |
BatcherImpl(BatchingDescriptor<ElementT,ElementResultT,RequestT,ResponseT> batchingDescriptor, UnaryCallable<RequestT,ResponseT> unaryCallable, RequestT prototype, BatchingSettings batchingSettings, ScheduledExecutorService executor, FlowController flowController) (deprecated)
public BatcherImpl(BatchingDescriptor<ElementT,ElementResultT,RequestT,ResponseT> batchingDescriptor, UnaryCallable<RequestT,ResponseT> unaryCallable, RequestT prototype, BatchingSettings batchingSettings, ScheduledExecutorService executor, FlowController flowController)
Deprecated. Please instantiate the Batcher with ApiCallContext
Parameters | |
---|---|
Name | Description |
batchingDescriptor |
BatchingDescriptor<ElementT,ElementResultT,RequestT,ResponseT> a BatchingDescriptor for transforming individual elements into wrappers request and response |
unaryCallable |
UnaryCallable<RequestT,ResponseT> a UnaryCallable object |
prototype |
RequestT a RequestT object |
batchingSettings |
BatchingSettings a BatchingSettings with configuration of thresholds |
executor |
ScheduledExecutorService |
flowController |
FlowController a FlowController for throttling requests. If it's null, create a FlowController object from BatchingSettings#getFlowControlSettings(). |
BatcherImpl(BatchingDescriptor<ElementT,ElementResultT,RequestT,ResponseT> batchingDescriptor, UnaryCallable<RequestT,ResponseT> unaryCallable, RequestT prototype, BatchingSettings batchingSettings, ScheduledExecutorService executor, FlowController flowController, ApiCallContext callContext)
public BatcherImpl(BatchingDescriptor<ElementT,ElementResultT,RequestT,ResponseT> batchingDescriptor, UnaryCallable<RequestT,ResponseT> unaryCallable, RequestT prototype, BatchingSettings batchingSettings, ScheduledExecutorService executor, FlowController flowController, ApiCallContext callContext)
Parameters | |
---|---|
Name | Description |
batchingDescriptor |
BatchingDescriptor<ElementT,ElementResultT,RequestT,ResponseT> a BatchingDescriptor for transforming individual elements into wrappers request and response |
unaryCallable |
UnaryCallable<RequestT,ResponseT> a UnaryCallable object |
prototype |
RequestT a RequestT object |
batchingSettings |
BatchingSettings a BatchingSettings with configuration of thresholds |
executor |
ScheduledExecutorService |
flowController |
FlowController a FlowController for throttling requests. If it's null, create a FlowController object from BatchingSettings#getFlowControlSettings(). |
callContext |
ApiCallContext a ApiCallContext object that'll be merged in unaryCallable |
Methods
add(ElementT element)
public ApiFuture<ElementResultT> add(ElementT element)
Queues the passed in element to be sent at some point in the future.
The element will be sent as part of a larger batch request at some point in the future. The returned ApiFuture will be resolved once the result for the element has been extracted from the batch response.
Note: Cancelling returned result simply marks the future cancelled, It would not stop the batch request.
Parameter | |
---|---|
Name | Description |
element |
ElementT |
Returns | |
---|---|
Type | Description |
ApiFuture<ElementResultT> |
cancelOutstanding()
public void cancelOutstanding()
Cancels all outstanding batch RPCs.
close()
public void close()
Closes this Batcher by preventing new elements from being added, then flushing the existing elements and waiting for all the outstanding work to be resolved.
Exceptions | |
---|---|
Type | Description |
InterruptedException |
close(Duration timeout)
public void close(Duration timeout)
Closes this Batcher by preventing new elements from being added, then flushing the existing elements and waiting for all the outstanding work to be resolved. If all of the outstanding work has not been resolved, then a BatchingException will be thrown with details of the remaining work. The batcher will remain in a closed state and will not allow additional elements to be added.
Parameter | |
---|---|
Name | Description |
timeout |
Duration |
Exceptions | |
---|---|
Type | Description |
InterruptedException |
|
TimeoutException |
closeAsync()
public ApiFuture<Void> closeAsync()
Closes this Batcher by preventing new elements from being added, and then sending outstanding elements. The returned future will be resolved when the last element completes
Returns | |
---|---|
Type | Description |
ApiFuture<Void> |
flush()
public void flush()
Synchronously sends any pending elements as a batch and waits for all outstanding batches to be complete.
Exceptions | |
---|---|
Type | Description |
InterruptedException |
getFlowController()
public FlowController getFlowController()
Returns | |
---|---|
Type | Description |
FlowController |
sendOutstanding()
public void sendOutstanding()
Sends accumulated elements asynchronously for batching.
Note: This method can be invoked concurrently unlike #add and #close, which can only be called from a single user thread. Please take caution to avoid race condition.