T
- The type of the wrapped TransformingAsyncResponseHandler
R
- The type of the object used to determine scope.@ThreadSafe public class IdempotentAsyncResponseHandler<T,R> extends Object implements TransformingAsyncResponseHandler<T>
TransformingAsyncResponseHandler
that allows attachment to an external scope and given a way
of evaluating whether that scope has changed or not will only allow prepare() to be called on its delegate once
per state change and will cache and reserve the future that is returned by the delegate the rest of the time.
One application of this wrapper is to ensure that prepare() is not called on the underlying response handler more than once per retry no matter where or how many times its invoked.
This class is asserted to be thread-safe and it should be fine to have multiple threads call prepare() simultaneously.
Modifier and Type | Method and Description |
---|---|
static <T,R> IdempotentAsyncResponseHandler<T,R> |
create(TransformingAsyncResponseHandler<T> wrappedHandler,
Supplier<R> preparedScopeSupplier,
BiPredicate<R,R> scopeInRangePredicate)
Creates a new wrapped
TransformingAsyncResponseHandler |
void |
onError(Throwable error) |
void |
onHeaders(SdkHttpResponse headers) |
void |
onStream(org.reactivestreams.Publisher<ByteBuffer> stream) |
CompletableFuture<T> |
prepare()
Return the future holding the transformed response.
|
public static <T,R> IdempotentAsyncResponseHandler<T,R> create(TransformingAsyncResponseHandler<T> wrappedHandler, Supplier<R> preparedScopeSupplier, BiPredicate<R,R> scopeInRangePredicate)
TransformingAsyncResponseHandler
T
- The type of the wrapped TransformingAsyncResponseHandler
R
- The type of the object used to determine scope.wrappedHandler
- A different handler to wrap.preparedScopeSupplier
- A function that retrieves the current scope to determine if a new future can be
prepared.scopeInRangePredicate
- A predicate that can be used to test the cached scope against the newly retrieved
scope to determine if a new future can be prepared.public CompletableFuture<T> prepare()
TransformingAsyncResponseHandler
This method is guaranteed to be called before the request is executed, and before SdkAsyncHttpResponseHandler.onHeaders(software.amazon.awssdk.http.SdkHttpResponse)
is signaled.
prepare
in interface TransformingAsyncResponseHandler<T>
public void onHeaders(SdkHttpResponse headers)
onHeaders
in interface SdkAsyncHttpResponseHandler
public void onStream(org.reactivestreams.Publisher<ByteBuffer> stream)
onStream
in interface SdkAsyncHttpResponseHandler
public void onError(Throwable error)
onError
in interface SdkAsyncHttpResponseHandler
Copyright © 2022. All rights reserved.