diff --git a/internal/compatibility/proto/decision.go b/internal/compatibility/proto/decision.go index eddd01b61..04943d8ca 100644 --- a/internal/compatibility/proto/decision.go +++ b/internal/compatibility/proto/decision.go @@ -142,6 +142,8 @@ func Decision(d *shared.Decision) *apiv1.Decision { Memo: Memo(attr.Memo), SearchAttributes: SearchAttributes(attr.SearchAttributes), JitterStart: secondsToDuration(attr.JitterStartSeconds), + CronOverlapPolicy: CronOverlapPolicy(attr.CronOverlapPolicy), + ActiveClusterSelectionPolicy: ActiveClusterSelectionPolicy(attr.ActiveClusterSelectionPolicy), }, } case shared.DecisionTypeStartChildWorkflowExecution: @@ -163,6 +165,8 @@ func Decision(d *shared.Decision) *apiv1.Decision { Header: Header(attr.Header), Memo: Memo(attr.Memo), SearchAttributes: SearchAttributes(attr.SearchAttributes), + CronOverlapPolicy: CronOverlapPolicy(attr.CronOverlapPolicy), + ActiveClusterSelectionPolicy: ActiveClusterSelectionPolicy(attr.ActiveClusterSelectionPolicy), }, } case shared.DecisionTypeSignalExternalWorkflowExecution: diff --git a/internal/compatibility/proto/types.go b/internal/compatibility/proto/types.go index a64d92a94..b207bf846 100644 --- a/internal/compatibility/proto/types.go +++ b/internal/compatibility/proto/types.go @@ -417,6 +417,7 @@ func WorkflowExecutionInfo(t *shared.WorkflowExecutionInfo) *apiv1.WorkflowExecu AutoResetPoints: ResetPoints(t.AutoResetPoints), TaskList: t.GetTaskList(), IsCron: t.GetIsCron(), + CronOverlapPolicy: CronOverlapPolicy(t.CronOverlapPolicy), } } diff --git a/internal/compatibility/testdata/common.go b/internal/compatibility/testdata/common.go index a8dd6d63c..4a3e4c0b0 100644 --- a/internal/compatibility/testdata/common.go +++ b/internal/compatibility/testdata/common.go @@ -48,6 +48,7 @@ const ( HostName = "HostName" Identity = "Identity" CronSchedule = "CronSchedule" + CronOverlapPolicy = 0 Checksum = "Checksum" Reason = "Reason" Cause = "Cause" diff --git a/internal/compatibility/testdata/decision.go b/internal/compatibility/testdata/decision.go index 9120ac1a0..25a22598a 100644 --- a/internal/compatibility/testdata/decision.go +++ b/internal/compatibility/testdata/decision.go @@ -106,6 +106,8 @@ var ( Memo: &Memo, SearchAttributes: &SearchAttributes, JitterStart: Duration4, + CronOverlapPolicy: apiv1.CronOverlapPolicy_CRON_OVERLAP_POLICY_SKIPPED, + ActiveClusterSelectionPolicy: ActiveClusterSelectionPolicyRegionSticky, } FailWorkflowExecutionDecisionAttributes = apiv1.FailWorkflowExecutionDecisionAttributes{ Failure: &Failure, @@ -162,6 +164,8 @@ var ( Header: &Header, Memo: &Memo, SearchAttributes: &SearchAttributes, + CronOverlapPolicy: apiv1.CronOverlapPolicy_CRON_OVERLAP_POLICY_SKIPPED, + ActiveClusterSelectionPolicy: ActiveClusterSelectionPolicyRegionSticky, } StartTimerDecisionAttributes = apiv1.StartTimerDecisionAttributes{ TimerId: TimerID, diff --git a/internal/compatibility/thrift/decision.go b/internal/compatibility/thrift/decision.go index ded236485..a924bd7eb 100644 --- a/internal/compatibility/thrift/decision.go +++ b/internal/compatibility/thrift/decision.go @@ -136,6 +136,8 @@ func Decision(d *apiv1.Decision) *shared.Decision { Memo: Memo(a.Memo), SearchAttributes: SearchAttributes(a.SearchAttributes), JitterStartSeconds: durationToSeconds(a.JitterStart), + CronOverlapPolicy: CronOverlapPolicy(a.CronOverlapPolicy), + ActiveClusterSelectionPolicy: ActiveClusterSelectionPolicy(a.ActiveClusterSelectionPolicy), } case *apiv1.Decision_StartChildWorkflowExecutionDecisionAttributes: decision.DecisionType = shared.DecisionTypeStartChildWorkflowExecution.Ptr() @@ -156,6 +158,8 @@ func Decision(d *apiv1.Decision) *shared.Decision { Header: Header(a.Header), Memo: Memo(a.Memo), SearchAttributes: SearchAttributes(a.SearchAttributes), + CronOverlapPolicy: CronOverlapPolicy(a.CronOverlapPolicy), + ActiveClusterSelectionPolicy: ActiveClusterSelectionPolicy(a.ActiveClusterSelectionPolicy), } case *apiv1.Decision_SignalExternalWorkflowExecutionDecisionAttributes: decision.DecisionType = shared.DecisionTypeSignalExternalWorkflowExecution.Ptr() diff --git a/internal/compatibility/thrift/types.go b/internal/compatibility/thrift/types.go index 6f87e88a1..b5211bfe0 100644 --- a/internal/compatibility/thrift/types.go +++ b/internal/compatibility/thrift/types.go @@ -421,20 +421,22 @@ func WorkflowExecutionInfo(t *apiv1.WorkflowExecutionInfo) *shared.WorkflowExecu return nil } return &shared.WorkflowExecutionInfo{ - Execution: WorkflowExecution(t.WorkflowExecution), - Type: WorkflowType(t.Type), - StartTime: timeToUnixNano(t.StartTime), - CloseTime: timeToUnixNano(t.CloseTime), - CloseStatus: WorkflowExecutionCloseStatus(t.CloseStatus), - HistoryLength: &t.HistoryLength, - ParentDomainId: ParentDomainID(t.ParentExecutionInfo), - ParentExecution: ParentWorkflowExecution(t.ParentExecutionInfo), - ExecutionTime: timeToUnixNano(t.ExecutionTime), - Memo: Memo(t.Memo), - SearchAttributes: SearchAttributes(t.SearchAttributes), - AutoResetPoints: ResetPoints(t.AutoResetPoints), - TaskList: &t.TaskList, - IsCron: &t.IsCron, + Execution: WorkflowExecution(t.WorkflowExecution), + Type: WorkflowType(t.Type), + StartTime: timeToUnixNano(t.StartTime), + CloseTime: timeToUnixNano(t.CloseTime), + CloseStatus: WorkflowExecutionCloseStatus(t.CloseStatus), + HistoryLength: &t.HistoryLength, + ParentDomainId: ParentDomainID(t.ParentExecutionInfo), + ParentExecution: ParentWorkflowExecution(t.ParentExecutionInfo), + ExecutionTime: timeToUnixNano(t.ExecutionTime), + Memo: Memo(t.Memo), + SearchAttributes: SearchAttributes(t.SearchAttributes), + AutoResetPoints: ResetPoints(t.AutoResetPoints), + TaskList: &t.TaskList, + IsCron: &t.IsCron, + CronOverlapPolicy: CronOverlapPolicy(t.CronOverlapPolicy), + ActiveClusterSelectionPolicy: ActiveClusterSelectionPolicy(t.ActiveClusterSelectionPolicy), } } diff --git a/internal/internal_workflow.go b/internal/internal_workflow.go index 467a91396..c7c127e00 100644 --- a/internal/internal_workflow.go +++ b/internal/internal_workflow.go @@ -183,6 +183,7 @@ type ( dataConverter DataConverter retryPolicy *shared.RetryPolicy cronSchedule string + cronOverlapPolicy shared.CronOverlapPolicy contextPropagators []ContextPropagator memo map[string]interface{} searchAttributes map[string]interface{} diff --git a/internal/internal_workflow_testsuite.go b/internal/internal_workflow_testsuite.go index 53bce4061..971299a19 100644 --- a/internal/internal_workflow_testsuite.go +++ b/internal/internal_workflow_testsuite.go @@ -191,9 +191,10 @@ type ( workerStopChannel chan struct{} sessionEnvironment *testSessionEnvironmentImpl - cronSchedule string - cronIterations int - workflowInput []byte + cronSchedule string + cronIterations int + workflowInput []byte + cronOverlapPolicy shared.CronOverlapPolicy } testSessionEnvironmentImpl struct { @@ -391,6 +392,7 @@ func (env *testWorkflowEnvironmentImpl) newTestWorkflowEnvironmentForChild(param childEnv.workflowInfo.ParentWorkflowDomain = &env.workflowInfo.Domain childEnv.workflowInfo.ParentWorkflowExecution = &env.workflowInfo.WorkflowExecution childEnv.executionTimeout = time.Duration(*params.executionStartToCloseTimeoutSeconds) * time.Second + childEnv.cronOverlapPolicy = params.cronOverlapPolicy if workflowHandler, ok := env.runningWorkflows[params.workflowID]; ok { // duplicate workflow ID if !workflowHandler.handled {