Add InvokeAsync for chained durable function calls (DOTNET-8661)#2374
Draft
GarrettBeatty wants to merge 1 commit into
Draft
Add InvokeAsync for chained durable function calls (DOTNET-8661)#2374GarrettBeatty wants to merge 1 commit into
GarrettBeatty wants to merge 1 commit into
Conversation
|
|
||
| COPY bin/publish/ ${LAMBDA_TASK_ROOT} | ||
|
|
||
| ENTRYPOINT ["/var/task/bootstrap"] |
|
|
||
| COPY bin/publish/ ${LAMBDA_TASK_ROOT} | ||
|
|
||
| ENTRYPOINT ["/var/task/bootstrap"] |
|
|
||
| COPY bin/publish/ ${LAMBDA_TASK_ROOT} | ||
|
|
||
| ENTRYPOINT ["/var/task/bootstrap"] |
|
|
||
| COPY bin/publish/ ${LAMBDA_TASK_ROOT} | ||
|
|
||
| ENTRYPOINT ["/var/task/bootstrap"] |
|
|
||
| COPY bin/publish/ ${LAMBDA_TASK_ROOT} | ||
|
|
||
| ENTRYPOINT ["/var/task/bootstrap"] |
|
|
||
| COPY bin/publish/ ${LAMBDA_TASK_ROOT} | ||
|
|
||
| ENTRYPOINT ["/var/task/bootstrap"] |
|
|
||
| COPY bin/publish/ ${LAMBDA_TASK_ROOT} | ||
|
|
||
| ENTRYPOINT ["/var/task/bootstrap"] |
|
|
||
| COPY bin/publish/ ${LAMBDA_TASK_ROOT} | ||
|
|
||
| ENTRYPOINT ["/var/task/bootstrap"] |
2e91110 to
a7868f3
Compare
464c591 to
d308c3b
Compare
Adds chained-function invocation to the .NET Durable Execution SDK. InvokeAsync calls another durable function as a separate execution; the caller suspends until the chained function completes, with the result checkpointed for replay. Public surface: - IDurableContext.InvokeAsync<TPayload, TResult> (reflection + AOT-safe overloads with positional ICheckpointSerializer<TPayload> and ICheckpointSerializer<TResult>) - InvokeConfig with Timeout (currently [Obsolete] - reserved for a future ChainedInvokeOptions wire field) and TenantId for tenant propagation - Exception subclass tree: InvokeException base + InvokeFailedException, InvokeTimedOutException, InvokeStoppedException Internal: - InvokeOperation<TPayload, TResult> mirrors WaitOperation's sync-flush START + SuspendAndAwait pattern. Replay maps STARTED/PENDING to re-suspend; SUCCEEDED to cached deserialize; FAILED/TIMED_OUT/STOPPED to typed exception subclasses. - ExecutionState.IsTerminalStatus now includes TimedOut (was missing). - LambdaDurableServiceClient.MapFromSdkOperation now preserves ErrorData and StackTrace fields across all operation types (Step, ChildContext, ChainedInvoke). Pre-existing data-loss bug fix. - Reuses TerminationReason.InvokePending and OperationSubTypes.Invoke from Wave 0. Adds 38 unit tests + 4 integration tests covering happy path, failure propagation, tenant-ID propagation, and replay determinism. Extends DurableFunctionDeployment to support a downstream callee function with cross-Lambda IAM. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
a7868f3 to
797d920
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary
Adds chained-function invocation to the .NET Durable Execution SDK.
InvokeAsynccalls another durable function as a separate execution; the caller suspends until the chained function completes, with the result checkpointed for replay.Stacked on top of #2372 (Wave 0 cross-cutting types).
Fixes DOTNET-8661.
Public surface
IDurableContext.InvokeAsync<TPayload, TResult>(reflection + AOT-safe overloads with positionalICheckpointSerializer<TPayload>andICheckpointSerializer<TResult>)InvokeConfigwithTimeout(currently[Obsolete]— reserved for a futureChainedInvokeOptionswire field) andTenantIdfor tenant propagationInvokeExceptionbase +InvokeFailedException,InvokeTimedOutException,InvokeStoppedExceptionInternal
InvokeOperation<TPayload, TResult>mirrorsWaitOperation's sync-flush START +SuspendAndAwaitpattern. Replay maps STARTED/PENDING to re-suspend; SUCCEEDED to cached deserialize; FAILED/TIMED_OUT/STOPPED to typed exception subclasses.ExecutionState.IsTerminalStatusnow includes TimedOut (was missing).LambdaDurableServiceClient.MapFromSdkOperationnow preservesErrorDataandStackTracefields across all operation types (Step, ChildContext, ChainedInvoke). Pre-existing data-loss bug fix.TerminationReason.InvokePendingandOperationSubTypes.Invokefrom Wave 0.Test plan
DurableFunctionDeploymentto support a downstream callee function with cross-Lambda IAM.🤖 Generated with Claude Code