From cc79ab33819f651cb2be5e1d4b58c40303e218bf Mon Sep 17 00:00:00 2001 From: Vytautas Date: Mon, 27 Jul 2020 21:34:14 +0300 Subject: [PATCH] Fix workflow replay to ignore -fm suffix (#1014) When existing workflow is being replayed with old activity names it can result in non-deterministic error if activity was scheduled with older cadence client version. Ignore the suffix the same way, as the rest part of name is ignored by extracting only the `lastPartOfName` --- internal/internal_task_handlers.go | 1 + internal/internal_worker_test.go | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/internal/internal_task_handlers.go b/internal/internal_task_handlers.go index 6e5c71b4e..98d4674b2 100644 --- a/internal/internal_task_handlers.go +++ b/internal/internal_task_handlers.go @@ -1223,6 +1223,7 @@ matchLoop: } func lastPartOfName(name string) string { + name = strings.TrimSuffix(name, "-fm") lastDotIdx := strings.LastIndex(name, ".") if lastDotIdx < 0 || lastDotIdx == len(name)-1 { return name diff --git a/internal/internal_worker_test.go b/internal/internal_worker_test.go index 9ab4e117a..e4dfa8ac8 100644 --- a/internal/internal_worker_test.go +++ b/internal/internal_worker_test.go @@ -219,6 +219,30 @@ func (s *internalWorkerTestSuite) TestReplayWorkflowHistory() { require.NoError(s.T(), err) } +func (s *internalWorkerTestSuite) TestReplayWorkflowHistory_Incomplete() { + taskList := "taskList1" + testEvents := []*shared.HistoryEvent{ + createTestEventWorkflowExecutionStarted(1, &shared.WorkflowExecutionStartedEventAttributes{ + WorkflowType: &shared.WorkflowType{Name: common.StringPtr("go.uber.org/cadence/internal.testReplayWorkflow")}, + TaskList: &shared.TaskList{Name: common.StringPtr(taskList)}, + Input: testEncodeFunctionArgs(nil, testReplayWorkflow), + }), + createTestEventDecisionTaskScheduled(2, &shared.DecisionTaskScheduledEventAttributes{}), + createTestEventDecisionTaskStarted(3), + createTestEventDecisionTaskCompleted(4, &shared.DecisionTaskCompletedEventAttributes{}), + createTestEventActivityTaskScheduled(5, &shared.ActivityTaskScheduledEventAttributes{ + ActivityId: common.StringPtr("0"), + ActivityType: &shared.ActivityType{Name: common.StringPtr("testActivity-fm")}, + TaskList: &shared.TaskList{Name: &taskList}, + }), + } + + history := &shared.History{Events: testEvents} + logger := getLogger() + err := ReplayWorkflowHistory(logger, history) + require.NoError(s.T(), err) +} + func (s *internalWorkerTestSuite) TestReplayWorkflowHistory_LocalActivity() { taskList := "taskList1" testEvents := []*shared.HistoryEvent{