Package org.apache.pulsar.common.util
Class FutureUtil
- java.lang.Object
-
- org.apache.pulsar.common.util.FutureUtil
-
public class FutureUtil extends java.lang.Object
This class is aimed at simplifying work withCompletableFuture
.
-
-
Constructor Summary
Constructors Constructor Description FutureUtil()
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static <T> java.util.concurrent.CompletableFuture<T>
addTimeoutHandling(java.util.concurrent.CompletableFuture<T> future, java.time.Duration timeout, java.util.concurrent.ScheduledExecutorService executor, java.util.function.Supplier<java.lang.Throwable> exceptionSupplier)
Adds timeout handling to an existingCompletableFuture
.static <T> java.util.concurrent.CompletableFuture<T>
createFutureWithTimeout(java.time.Duration timeout, java.util.concurrent.ScheduledExecutorService executor, java.util.function.Supplier<java.lang.Throwable> exceptionSupplier)
Creates a newCompletableFuture
instance with timeout handling.static java.util.concurrent.TimeoutException
createTimeoutException(java.lang.String message, java.lang.Class<?> sourceClass, java.lang.String sourceMethod)
Creates a low-overhead timeout exception which is performance optimized to minimize allocations and cpu consumption.static <T> java.util.concurrent.CompletableFuture<T>
failedFuture(java.lang.Throwable t)
static <T> java.util.concurrent.CompletableFuture<T>
futureWithDeadline(java.util.concurrent.ScheduledExecutorService executor)
static <T> java.util.concurrent.CompletableFuture<T>
futureWithDeadline(java.util.concurrent.ScheduledExecutorService executor, java.lang.Long delay, java.util.concurrent.TimeUnit unit, java.lang.Exception exp)
static <T> java.util.Optional<java.lang.Throwable>
getException(java.util.concurrent.CompletableFuture<T> future)
static java.lang.Throwable
unwrapCompletionException(java.lang.Throwable t)
static java.util.concurrent.CompletableFuture<java.lang.Void>
waitForAll(java.util.List<? extends java.util.concurrent.CompletableFuture<?>> futures)
Return a future that represents the completion of the futures in the provided list.static java.util.concurrent.CompletableFuture<java.lang.Void>
waitForAllAndSupportCancel(java.util.List<? extends java.util.concurrent.CompletableFuture<?>> futures)
Return a future that represents the completion of the futures in the provided list.static java.util.concurrent.CompletableFuture<java.lang.Object>
waitForAny(java.util.List<? extends java.util.concurrent.CompletableFuture<?>> futures)
Return a future that represents the completion of any future in the provided list.static void
whenCancelledOrTimedOut(java.util.concurrent.CompletableFuture<?> future, java.lang.Runnable cancelAction)
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
-
-
-
Method Detail
-
waitForAll
public static java.util.concurrent.CompletableFuture<java.lang.Void> waitForAll(java.util.List<? extends java.util.concurrent.CompletableFuture<?>> futures)
Return a future that represents the completion of the futures in the provided list.- Parameters:
futures
- futures to wait for- Returns:
- a new CompletableFuture that is completed when all of the given CompletableFutures complete
-
waitForAny
public static java.util.concurrent.CompletableFuture<java.lang.Object> waitForAny(java.util.List<? extends java.util.concurrent.CompletableFuture<?>> futures)
Return a future that represents the completion of any future in the provided list.- Parameters:
futures
- futures to wait any- Returns:
- a new CompletableFuture that is completed when any of the given CompletableFutures complete
-
waitForAllAndSupportCancel
public static java.util.concurrent.CompletableFuture<java.lang.Void> waitForAllAndSupportCancel(java.util.List<? extends java.util.concurrent.CompletableFuture<?>> futures)
Return a future that represents the completion of the futures in the provided list. 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
public static void whenCancelledOrTimedOut(java.util.concurrent.CompletableFuture<?> future, java.lang.Runnable cancelAction)
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
public static <T> java.util.concurrent.CompletableFuture<T> failedFuture(java.lang.Throwable t)
-
unwrapCompletionException
public static java.lang.Throwable unwrapCompletionException(java.lang.Throwable t)
-
createFutureWithTimeout
public static <T> java.util.concurrent.CompletableFuture<T> createFutureWithTimeout(java.time.Duration timeout, java.util.concurrent.ScheduledExecutorService executor, java.util.function.Supplier<java.lang.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> java.util.concurrent.CompletableFuture<T> addTimeoutHandling(java.util.concurrent.CompletableFuture<T> future, java.time.Duration timeout, java.util.concurrent.ScheduledExecutorService executor, java.util.function.Supplier<java.lang.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
-
createTimeoutException
public static java.util.concurrent.TimeoutException createTimeoutException(java.lang.String message, java.lang.Class<?> sourceClass, java.lang.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
-
futureWithDeadline
public static <T> java.util.concurrent.CompletableFuture<T> futureWithDeadline(java.util.concurrent.ScheduledExecutorService executor, java.lang.Long delay, java.util.concurrent.TimeUnit unit, java.lang.Exception exp)
-
futureWithDeadline
public static <T> java.util.concurrent.CompletableFuture<T> futureWithDeadline(java.util.concurrent.ScheduledExecutorService executor)
-
getException
public static <T> java.util.Optional<java.lang.Throwable> getException(java.util.concurrent.CompletableFuture<T> future)
-
-