Skip to content

Commit 72dadb9

Browse files
authored
Dump all registered activities when activity not found (#437)
This commit modifies task handler in the client SDK to dump all activities registered when a workflow executes an activity whose name is not found, for example, due to a typo when specifying the activity by name.
1 parent c0007b4 commit 72dadb9

File tree

3 files changed

+27
-4
lines changed

3 files changed

+27
-4
lines changed

internal/error_test.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,11 @@ package internal
2222

2323
import (
2424
"errors"
25-
"testing"
26-
25+
"fmt"
2726
"github.com/stretchr/testify/require"
2827
"go.uber.org/cadence/.gen/go/shared"
2928
"go.uber.org/zap"
29+
"testing"
3030
)
3131

3232
const (
@@ -72,6 +72,18 @@ func Test_ActivityPanic(t *testing.T) {
7272
require.Equal(t, "panic-blabla", panicErr.Error())
7373
}
7474

75+
func Test_ActivityNotRegistered(t *testing.T) {
76+
registeredActivityFn, unregisteredActivitFn := "RegisteredActivity", "UnregisteredActivityFn"
77+
RegisterActivityWithOptions(func() error { return nil }, RegisterActivityOptions{Name: registeredActivityFn})
78+
s := &WorkflowTestSuite{}
79+
s.SetLogger(zap.NewNop())
80+
env := s.NewTestActivityEnvironment()
81+
_, err := env.ExecuteActivity(unregisteredActivitFn)
82+
require.Error(t, err)
83+
require.Contains(t, err.Error(), fmt.Sprintf("unable to find activityType=%v", unregisteredActivitFn))
84+
require.Contains(t, err.Error(), registeredActivityFn)
85+
}
86+
7587
func Test_WorkflowError(t *testing.T) {
7688
errorWorkflowFn := func(ctx Context, i int) error {
7789
return errs[i][0]

internal/internal_task_handlers.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1240,7 +1240,8 @@ func (ath *activityTaskHandlerImpl) Execute(taskList string, t *s.PollForActivit
12401240
activityImplementation := ath.getActivity(activityType.GetName())
12411241
if activityImplementation == nil {
12421242
// Couldn't find the activity implementation.
1243-
return nil, fmt.Errorf("unable to find activityType=%v", activityType.GetName())
1243+
supported := strings.Join(ath.getRegisteredActivityNames(), ", ")
1244+
return nil, fmt.Errorf("unable to find activityType=%v. Supported types: [%v]", activityType.GetName(), supported)
12441245
}
12451246

12461247
// panic handler
@@ -1282,6 +1283,13 @@ func (ath *activityTaskHandlerImpl) getActivity(name string) activity {
12821283
return nil
12831284
}
12841285

1286+
func (ath *activityTaskHandlerImpl) getRegisteredActivityNames() (activityNames []string) {
1287+
for _, a := range ath.hostEnv.activityFuncMap {
1288+
activityNames = append(activityNames, a.ActivityType().Name)
1289+
}
1290+
return
1291+
}
1292+
12851293
func createNewDecision(decisionType s.DecisionType) *s.Decision {
12861294
return &s.Decision{
12871295
DecisionType: common.DecisionTypePtr(decisionType),

internal/internal_workflow_testsuite.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -407,8 +407,11 @@ func (env *testWorkflowEnvironmentImpl) executeActivity(
407407
taskHandler := env.newTestActivityTaskHandler(defaultTestTaskList)
408408
result, err := taskHandler.Execute(defaultTestTaskList, task)
409409
if err != nil {
410-
panic(err)
410+
topLine := fmt.Sprintf("activity for %s [panic]:", defaultTestTaskList)
411+
st := getStackTraceRaw(topLine, 7, 0)
412+
return nil, newPanicError(err.Error(), st)
411413
}
414+
412415
if result == ErrActivityResultPending {
413416
return nil, ErrActivityResultPending
414417
}

0 commit comments

Comments
 (0)