[core] Add cancellation handling for nextInvocation() #459
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Allow
LambdaChannelHandler.nextInvocation
to be cancelled.Motivation:
If we want to use ServiceLifecycle with the lambda runtime the lambda runtime needs to be cancellable either via a ServiceLifecycle graceful shutdown or via Task cancellation. To avoid bringing in the ServiceLifecycle dependency this PR adds cancellation via Task cancellation handler.
Modifications:
Wrap
withCheckedThrowingContinuation
call with awithTaskCancellationHandler
.Added
LambdaRuntimeClientTests.testCancellation
Result:
You can now cancel the runtime while it is waiting for the next invocation.
I am slightly concerned about this PR though (although I get no Sendability warnings/errors). The process inside the task
withTaskCancellationHandler
is not running on the event loop (which is why we need thecontext.eventLoop.execute {}
) but I am allowed to set the handler state which I assumed would be isolated to the event loop. Would be good is @fabianfett or someone had a look at this before it was merged.