From 442ecd76c5ceac2cbfc5d91f504d3dec18c13238 Mon Sep 17 00:00:00 2001 From: "He-Pin(kerr)" Date: Sun, 24 Aug 2025 02:09:56 +0800 Subject: [PATCH] chore: Make timeoutCompletionStage accept java Duration. (#2063) --- .../org/apache/pekko/pattern/PatternsTest.java | 2 +- .../pekko/pattern/FutureTimeoutSupport.scala | 14 ++++++++------ .../scala/org/apache/pekko/pattern/Patterns.scala | 2 +- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/actor-tests/src/test/java/org/apache/pekko/pattern/PatternsTest.java b/actor-tests/src/test/java/org/apache/pekko/pattern/PatternsTest.java index fb3e166f53..18dd2f7651 100644 --- a/actor-tests/src/test/java/org/apache/pekko/pattern/PatternsTest.java +++ b/actor-tests/src/test/java/org/apache/pekko/pattern/PatternsTest.java @@ -536,7 +536,7 @@ public class PatternsTest extends JUnitSuite { delayedStage.toCompletableFuture().get(3, SECONDS); } catch (ExecutionException e) { assertTrue(e.getCause() instanceof TimeoutException); - assertEquals("Timeout of 200 milliseconds expired", e.getCause().getMessage()); + assertEquals("Timeout of PT0.2S expired", e.getCause().getMessage()); } } diff --git a/actor/src/main/scala/org/apache/pekko/pattern/FutureTimeoutSupport.scala b/actor/src/main/scala/org/apache/pekko/pattern/FutureTimeoutSupport.scala index f669e65c37..298a177105 100644 --- a/actor/src/main/scala/org/apache/pekko/pattern/FutureTimeoutSupport.scala +++ b/actor/src/main/scala/org/apache/pekko/pattern/FutureTimeoutSupport.scala @@ -126,8 +126,8 @@ trait FutureTimeoutSupport { * if the provided value is not completed within the specified duration. * @since 1.2.0 */ - @deprecated("Use `CompletableFuture#orTimeout instead.", "Pekko 2.0.0") - def timeoutCompletionStage[T](duration: FiniteDuration, using: Scheduler)(value: => CompletionStage[T])( + @deprecated("Use `CompletableFuture#orTimeout instead.", "2.0.0") + def timeoutCompletionStage[T](duration: java.time.Duration, using: Scheduler)(value: => CompletionStage[T])( implicit ec: ExecutionContext): CompletionStage[T] = { val stage: CompletionStage[T] = try value @@ -138,10 +138,12 @@ trait FutureTimeoutSupport { stage } else { val p = new CompletableFuture[T] - val timeout = using.scheduleOnce(duration) { - p.completeExceptionally(new TimeoutException(s"Timeout of $duration expired")) - stage.toCompletableFuture.cancel(true) - } + val timeout = using.scheduleOnce(duration, + () => { + p.completeExceptionally(new TimeoutException(s"Timeout of $duration expired")) + stage.toCompletableFuture.cancel(true) + () + }) stage.handle[Unit]((v: T, ex: Throwable) => { timeout.cancel() if (v != null) p.complete(v) diff --git a/actor/src/main/scala/org/apache/pekko/pattern/Patterns.scala b/actor/src/main/scala/org/apache/pekko/pattern/Patterns.scala index 849db90d38..0e87f91332 100644 --- a/actor/src/main/scala/org/apache/pekko/pattern/Patterns.scala +++ b/actor/src/main/scala/org/apache/pekko/pattern/Patterns.scala @@ -480,7 +480,7 @@ object Patterns { scheduler: Scheduler, context: ExecutionContext, value: Callable[CompletionStage[T]]): CompletionStage[T] = - timeoutCompletionStage(duration.asScala, scheduler)(value.call())(context) + timeoutCompletionStage(duration, scheduler)(value.call())(context) /** * Returns an internally retrying [[java.util.concurrent.CompletionStage]]