Skip to content

Commit 98500bc

Browse files
authored
Merge pull request #379 from lyuboxa/lk/exec-activity-via-name
Execute activity with name
2 parents 604bff3 + fbe9d00 commit 98500bc

File tree

2 files changed

+38
-11
lines changed

2 files changed

+38
-11
lines changed

workflow/activity.go

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -40,16 +40,25 @@ func executeActivity[TResult any](ctx Context, options ActivityOptions, attempt
4040
return f
4141
}
4242

43-
// Check return type
44-
if err := a.ReturnTypeMatch[TResult](activity); err != nil {
45-
f.Set(*new(TResult), err)
46-
return f
47-
}
43+
var name string
44+
45+
// Check if activity is referred by name
46+
if activityName, ok := activity.(string); ok {
47+
name = activityName
48+
} else {
49+
// Check return type
50+
if err := a.ReturnTypeMatch[TResult](activity); err != nil {
51+
f.Set(*new(TResult), err)
52+
return f
53+
}
4854

49-
// Check arguments
50-
if err := a.ParamsMatch(activity, args...); err != nil {
51-
f.Set(*new(TResult), err)
52-
return f
55+
// Check arguments
56+
if err := a.ParamsMatch(activity, args...); err != nil {
57+
f.Set(*new(TResult), err)
58+
return f
59+
}
60+
61+
name = fn.Name(activity)
5362
}
5463

5564
cv := contextvalue.Converter(ctx)
@@ -62,8 +71,6 @@ func executeActivity[TResult any](ctx Context, options ActivityOptions, attempt
6271
wfState := workflowstate.WorkflowState(ctx)
6372
scheduleEventID := wfState.GetNextScheduleEventID()
6473

65-
name := fn.Name(activity)
66-
6774
// Capture context
6875
propagators := propagators(ctx)
6976
metadata := &Metadata{}

workflow/activity_test.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,3 +62,23 @@ func Test_executeActivity_ParamMismatch(t *testing.T) {
6262
c.Execute()
6363
require.True(t, c.Finished())
6464
}
65+
66+
func Test_executeActivity_NameAsString(t *testing.T) {
67+
ctx := sync.Background()
68+
ctx = contextvalue.WithConverter(ctx, converter.DefaultConverter)
69+
ctx = workflowstate.WithWorkflowState(
70+
ctx,
71+
workflowstate.NewWorkflowState(
72+
core.NewWorkflowInstance("actName", ""), slog.Default(), noop.NewTracerProvider().Tracer("test"), clock.New()),
73+
)
74+
75+
c := sync.NewCoroutine(ctx, func(ctx Context) error {
76+
executeActivity[int](ctx, DefaultActivityOptions, 1, "actName", "foo", 1)
77+
return nil
78+
})
79+
80+
c.Execute()
81+
82+
require.NoError(t, c.Error())
83+
require.True(t, c.Finished())
84+
}

0 commit comments

Comments
 (0)