Package com.google.api.gax.batching
Interface Batcher<ElementT,ElementResultT>
-
- Type Parameters:
ElementT- The type of each individual element to be batched.ElementResultT- The type of the result for each individual element.
- All Superinterfaces:
AutoCloseable
- All Known Implementing Classes:
BatcherImpl
@InternalExtensionOnly public interface Batcher<ElementT,ElementResultT> extends AutoCloseable
Represents a batching context where individual elements will be accumulated and flushed in a large batch request at some point in the future. The buffered elements can be flushed manually or when triggered by an internal threshold. This is intended to be used for high throughput scenarios at the cost of latency.Batcher instances are not thread safe. To use across different threads, create a new Batcher instance per thread.
-
-
Field Summary
Fields Modifier and Type Field Description static ApiCallContext.Key<Long>THROTTLED_TIME_KEYApiCallContext.Keyfor tracking batch total throttled time
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description ApiFuture<ElementResultT>add(ElementT entry)Queues the passed in element to be sent at some point in the future.voidclose()Closes this Batcher by preventing new elements from being added, and then flushing the existing elements.ApiFuture<Void>closeAsync()Closes this Batcher by preventing new elements from being added, and then sending outstanding elements.voidflush()Synchronously sends any pending elements as a batch and waits for all outstanding batches to be complete.voidsendOutstanding()Sends accumulated elements asynchronously for batching.
-
-
-
Field Detail
-
THROTTLED_TIME_KEY
static final ApiCallContext.Key<Long> THROTTLED_TIME_KEY
ApiCallContext.Keyfor tracking batch total throttled time
-
-
Method Detail
-
add
ApiFuture<ElementResultT> add(ElementT entry)
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
ApiFuturewill 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.
-
flush
void flush() throws InterruptedExceptionSynchronously sends any pending elements as a batch and waits for all outstanding batches to be complete.- Throws:
InterruptedException
-
sendOutstanding
void sendOutstanding()
Sends accumulated elements asynchronously for batching.Note: This method can be invoked concurrently unlike
add(ElementT)andclose(), which can only be called from a single user thread. Please take caution to avoid race condition.
-
close
void close() throws InterruptedExceptionCloses this Batcher by preventing new elements from being added, and then flushing the existing elements.- Specified by:
closein interfaceAutoCloseable- Throws:
InterruptedException
-
-