From c3ac51177ea9fa4765b1f5c7fef83a7a4d91a907 Mon Sep 17 00:00:00 2001 From: Quinn Klassen Date: Wed, 14 Aug 2024 07:45:24 -0700 Subject: [PATCH] Improve docs and tests for HandlerUnfinishedPolicy (#1589) --- internal/workflow.go | 4 ++-- internal/workflow_testsuite_test.go | 26 +++++++++++++++++++++++++- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/internal/workflow.go b/internal/workflow.go index f09ce993b..7c1eb676a 100644 --- a/internal/workflow.go +++ b/internal/workflow.go @@ -48,7 +48,7 @@ import ( // HandlerUnfinishedPolicy actions taken if a workflow completes with running handlers. // // Policy defining actions taken when a workflow exits while update or signal handlers are running. -// The workflow exit may be due to successful return, failure, cancellation, or continue-as-new +// The workflow exit may be due to successful return, cancellation, or continue-as-new type HandlerUnfinishedPolicy int const ( @@ -2368,4 +2368,4 @@ func (wc *workflowEnvironmentInterceptor) ExecuteNexusOperation(ctx Context, cli func (wc *workflowEnvironmentInterceptor) RequestCancelNexusOperation(ctx Context, input RequestCancelNexusOperationInput) { wc.env.RequestCancelNexusOperation(input.seq) -} \ No newline at end of file +} diff --git a/internal/workflow_testsuite_test.go b/internal/workflow_testsuite_test.go index a5abc60bb..b9f779845 100644 --- a/internal/workflow_testsuite_test.go +++ b/internal/workflow_testsuite_test.go @@ -573,6 +573,16 @@ func TestWorkflowAllHandlersFinished(t *testing.T) { }) }, time.Minute) + env.RegisterDelayedCallback(func() { + env.UpdateWorkflow("nonWarningHandler", "id_3", &updateCallback{ + reject: func(err error) { + require.Fail(t, "update should not be rejected") + }, + accept: func() {}, + complete: func(interface{}, error) {}, + }) + }, 2*time.Minute) + env.RegisterDelayedCallback(func() { if completionType == "cancel" { env.CancelWorkflow() @@ -596,6 +606,20 @@ func TestWorkflowAllHandlersFinished(t *testing.T) { return 0, err } + err = SetUpdateHandler(ctx, "nonWarningHandler", func(ctx Context) error { + inflightUpdates++ + ranUpdates++ + defer func() { + inflightUpdates-- + }() + return Sleep(ctx, time.Hour) + }, UpdateHandlerOptions{ + UnfinishedPolicy: HandlerUnfinishedPolicyAbandon, + }) + if err != nil { + return 0, err + } + var completeType string s := NewSelector(ctx) s.AddReceive(ctx.Done(), func(c ReceiveChannel, more bool) { @@ -671,7 +695,7 @@ func TestWorkflowAllHandlersFinished(t *testing.T) { var buf bytes.Buffer result, err := runWf("complete", &buf) require.NoError(t, err) - require.Equal(t, 2, result) + require.Equal(t, 3, result) assertExpectedLogs(t, &buf, true) }) t.Run("cancel", func(t *testing.T) {