Skip to content

Commit 8f2cf94

Browse files
Fix for kotlin await
1 parent d5ec49b commit 8f2cf94

3 files changed

Lines changed: 14 additions & 2 deletions

File tree

sdk-api-kotlin/src/main/kotlin/dev/restate/sdk/kotlin/ContextImpl.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ import kotlin.jvm.optionals.getOrNull
2929
import kotlin.time.Duration
3030
import kotlin.time.toJavaDuration
3131
import kotlinx.coroutines.*
32-
import kotlinx.coroutines.future.await
3332

3433
internal class ContextImpl
3534
internal constructor(

sdk-api-kotlin/src/main/kotlin/dev/restate/sdk/kotlin/Util.kt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,23 @@
99
package dev.restate.sdk.kotlin
1010

1111
import dev.restate.common.Slice
12+
import dev.restate.sdk.common.AbortedExecutionException
1213
import dev.restate.sdk.endpoint.definition.HandlerContext
1314
import dev.restate.serde.Serde
15+
import java.util.concurrent.CompletionStage
1416
import kotlinx.coroutines.CancellationException
17+
import kotlinx.coroutines.future.await as kotlinxAwait
18+
19+
/**
20+
* Awaits [this], translating the SDK-internal [AbortedExecutionException] control-flow signal into
21+
* a coroutine [CancellationException] (coroutine idiomatic way of initiating an abort).
22+
*/
23+
internal suspend fun <T> CompletionStage<T>.await(): T =
24+
try {
25+
this.kotlinxAwait()
26+
} catch (e: AbortedExecutionException) {
27+
throw CancellationException("Restate invocation suspended or closed").apply { initCause(e) }
28+
}
1529

1630
internal fun <T : Any?> Serde<T>.serializeWrappingException(
1731
handlerContext: HandlerContext,

sdk-api-kotlin/src/main/kotlin/dev/restate/sdk/kotlin/futures.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ import kotlin.time.Duration
2323
import kotlin.time.toJavaDuration
2424
import kotlinx.coroutines.CoroutineScope
2525
import kotlinx.coroutines.currentCoroutineContext
26-
import kotlinx.coroutines.future.await
2726
import kotlinx.coroutines.launch
2827

2928
internal abstract class BaseDurableFutureImpl<T : Any?> : DurableFuture<T> {

0 commit comments

Comments
 (0)