Package org.apache.pulsar.common.util
Class FutureUtil
java.lang.Object
org.apache.pulsar.common.util.FutureUtil
This class is aimed at simplifying work with
CompletableFuture
.-
Nested Class Summary
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionstatic <T> CompletableFuture<T>
addTimeoutHandling
(CompletableFuture<T> future, Duration timeout, ScheduledExecutorService executor, Supplier<Throwable> exceptionSupplier) Adds timeout handling to an existingCompletableFuture
.static <T> CompletableFuture<T>
composeAsync
(Supplier<CompletableFuture<T>> futureSupplier, Executor executor) static <T> CompletableFuture<T>
createFutureWithTimeout
(Duration timeout, ScheduledExecutorService executor, Supplier<Throwable> exceptionSupplier) Creates a newCompletableFuture
instance with timeout handling.static TimeoutException
createTimeoutException
(String message, Class<?> sourceClass, String sourceMethod) Creates a low-overhead timeout exception which is performance optimized to minimize allocations and cpu consumption.static <T> CompletableFuture<T>
getException
(CompletableFuture<T> future) static void
safeRunAsync
(Runnable runnable, Executor executor, CompletableFuture completableFuture) Executes an operation using the suppliedExecutor
and notify failures on the suppliedCompletableFuture
.static Throwable
static CompletableFuture<Void>
waitForAll
(Collection<? extends CompletableFuture<?>> futures) Return a future that represents the completion of the futures in the provided Collection.static <T> CompletableFuture<List<T>>
waitForAll
(Stream<CompletableFuture<List<T>>> futures) static CompletableFuture<Void>
waitForAllAndSupportCancel
(Collection<? extends CompletableFuture<?>> futures) Return a future that represents the completion of the futures in the provided Collection.static CompletableFuture<Object>
waitForAny
(Collection<? extends CompletableFuture<?>> futures) Return a future that represents the completion of any future in the provided Collection.static CompletableFuture<Optional<Object>>
waitForAny
(Collection<? extends CompletableFuture<?>> futures, Predicate<Object> tester) Return a future that represents the completion of any future that match the predicate in the provided Collection.static void
whenCancelledOrTimedOut
(CompletableFuture<?> future, Runnable cancelAction) If the future is cancelled or times out, the cancel action will be invoked.static CompletionException
wrapToCompletionException
(Throwable throwable) Wrap throwable exception to CompletionException if that exception is not an instance of CompletionException.
-
Constructor Details
-
FutureUtil
public FutureUtil()
-
-
Method Details
-
waitForAll
public static CompletableFuture<Void> waitForAll(Collection<? extends CompletableFuture<?>> futures) Return a future that represents the completion of the futures in the provided Collection.- Parameters:
futures
- futures to wait for- Returns:
- a new CompletableFuture that is completed when all of the given CompletableFutures complete
-
waitForAll
-
waitForAny
public static CompletableFuture<Object> waitForAny(Collection<? extends CompletableFuture<?>> futures) Return a future that represents the completion of any future in the provided Collection.- Parameters:
futures
- futures to wait any- Returns:
- a new CompletableFuture that is completed when any of the given CompletableFutures complete
-
waitForAny
public static CompletableFuture<Optional<Object>> waitForAny(Collection<? extends CompletableFuture<?>> futures, Predicate<Object> tester) Return a future that represents the completion of any future that match the predicate in the provided Collection.- Parameters:
futures
- futures to wait anytester
- if any future match the predicate- Returns:
- a new CompletableFuture that is completed when any of the given CompletableFutures match the tester
-
waitForAllAndSupportCancel
public static CompletableFuture<Void> waitForAllAndSupportCancel(Collection<? extends CompletableFuture<?>> futures) Return a future that represents the completion of the futures in the provided Collection. The future will supportCompletableFuture.cancel(boolean)
. It will cancel all unfinished futures when the future gets cancelled.- Parameters:
futures
- futures to wait for- Returns:
- a new CompletableFuture that is completed when all of the given CompletableFutures complete
-
whenCancelledOrTimedOut
If the future is cancelled or times out, the cancel action will be invoked. The action is executed once if the future completes withCancellationException
orTimeoutException
- Parameters:
future
- future to attach the action tocancelAction
- action to invoke if the future is cancelled or times out
-
failedFuture
-
unwrapCompletionException
-
createFutureWithTimeout
public static <T> CompletableFuture<T> createFutureWithTimeout(Duration timeout, ScheduledExecutorService executor, Supplier<Throwable> exceptionSupplier) Creates a newCompletableFuture
instance with timeout handling.- Type Parameters:
T
- type parameter for the future- Parameters:
timeout
- the duration of the timeoutexecutor
- the executor to use for scheduling the timeoutexceptionSupplier
- the supplier for creating the exception- Returns:
- the new
CompletableFuture
instance
-
addTimeoutHandling
public static <T> CompletableFuture<T> addTimeoutHandling(CompletableFuture<T> future, Duration timeout, ScheduledExecutorService executor, Supplier<Throwable> exceptionSupplier) Adds timeout handling to an existingCompletableFuture
.- Type Parameters:
T
- type parameter for the future- Parameters:
future
- the target futuretimeout
- the duration of the timeoutexecutor
- the executor to use for scheduling the timeoutexceptionSupplier
- the supplier for creating the exception- Returns:
- returns the original target future
-
composeAsync
@Nonnull public static <T> CompletableFuture<T> composeAsync(Supplier<CompletableFuture<T>> futureSupplier, Executor executor) - Throws:
RejectedExecutionException
- if this task cannot be accepted for executionNullPointerException
- if one of params is null
-
createTimeoutException
public static TimeoutException createTimeoutException(String message, Class<?> sourceClass, String sourceMethod) Creates a low-overhead timeout exception which is performance optimized to minimize allocations and cpu consumption. It sets the stacktrace of the exception to the given source class and source method name. The instances of this class can be cached or stored as constants and reused multiple times.- Parameters:
message
- exception messagesourceClass
- source class for manually filled in stacktracesourceMethod
- source method name for manually filled in stacktrace- Returns:
- new TimeoutException instance
-
getException
-
wrapToCompletionException
Wrap throwable exception to CompletionException if that exception is not an instance of CompletionException.- Parameters:
throwable
- Exception- Returns:
- CompletionException
-
safeRunAsync
public static void safeRunAsync(Runnable runnable, Executor executor, CompletableFuture completableFuture) Executes an operation using the suppliedExecutor
and notify failures on the suppliedCompletableFuture
.- Parameters:
runnable
- the runnable to executeexecutor
- the executor to use for executing the runnablecompletableFuture
- the future to complete in case of exceptions
-