Skip to content

Commit 1c84aad

Browse files
authored
Fix continue as new validation (#3845)
1 parent b494736 commit 1c84aad

File tree

2 files changed

+64
-6
lines changed

2 files changed

+64
-6
lines changed

service/history/commandChecker.go

+28-6
Original file line numberDiff line numberDiff line change
@@ -644,9 +644,30 @@ func (v *commandAttrValidator) validateContinueAsNewWorkflowExecutionAttributes(
644644
attributes.WorkflowTaskTimeout = timestamp.DurationPtr(timestamp.DurationValue(executionInfo.DefaultWorkflowTaskTimeout))
645645
}
646646

647+
attributes.WorkflowRunTimeout = timestamp.DurationPtr(
648+
common.OverrideWorkflowRunTimeout(
649+
timestamp.DurationValue(attributes.GetWorkflowRunTimeout()),
650+
timestamp.DurationValue(executionInfo.GetWorkflowExecutionTimeout()),
651+
),
652+
)
653+
654+
attributes.WorkflowTaskTimeout = timestamp.DurationPtr(
655+
common.OverrideWorkflowTaskTimeout(
656+
namespace.String(),
657+
timestamp.DurationValue(attributes.GetWorkflowTaskTimeout()),
658+
timestamp.DurationValue(attributes.GetWorkflowRunTimeout()),
659+
v.config.DefaultWorkflowTaskTimeout,
660+
),
661+
)
662+
663+
if err := v.validateWorkflowRetryPolicy(namespace, attributes.RetryPolicy); err != nil {
664+
return failedCause, err
665+
}
666+
647667
if err = v.searchAttributesValidator.Validate(attributes.GetSearchAttributes(), namespace.String(), visibilityIndexName); err != nil {
648668
return enumspb.WORKFLOW_TASK_FAILED_CAUSE_BAD_SEARCH_ATTRIBUTES, err
649669
}
670+
650671
return enumspb.WORKFLOW_TASK_FAILED_CAUSE_UNSPECIFIED, nil
651672
}
652673

@@ -704,7 +725,7 @@ func (v *commandAttrValidator) validateStartChildExecutionAttributes(
704725
return failedCause, serviceerror.NewInvalidArgument("Invalid WorkflowTaskTimeout.")
705726
}
706727

707-
if err := v.validateWorkflowRetryPolicy(attributes); err != nil {
728+
if err := v.validateWorkflowRetryPolicy(namespace.Name(attributes.GetNamespace()), attributes.RetryPolicy); err != nil {
708729
return failedCause, err
709730
}
710731

@@ -790,17 +811,18 @@ func (v *commandAttrValidator) validateActivityRetryPolicy(
790811
}
791812

792813
func (v *commandAttrValidator) validateWorkflowRetryPolicy(
793-
attributes *commandpb.StartChildWorkflowExecutionCommandAttributes,
814+
namespaceName namespace.Name,
815+
retryPolicy *commonpb.RetryPolicy,
794816
) error {
795-
if attributes.RetryPolicy == nil {
817+
if retryPolicy == nil {
796818
// By default, if the user does not explicitly set a retry policy for a Child Workflow, do not perform any retries.
797819
return nil
798820
}
799821

800822
// Otherwise, for any unset fields on the retry policy, set with defaults
801-
defaultWorkflowRetrySettings := common.FromConfigToDefaultRetrySettings(v.getDefaultWorkflowRetrySettings(attributes.GetNamespace()))
802-
common.EnsureRetryPolicyDefaults(attributes.RetryPolicy, defaultWorkflowRetrySettings)
803-
return common.ValidateRetryPolicy(attributes.RetryPolicy)
823+
defaultWorkflowRetrySettings := common.FromConfigToDefaultRetrySettings(v.getDefaultWorkflowRetrySettings(namespaceName.String()))
824+
common.EnsureRetryPolicyDefaults(retryPolicy, defaultWorkflowRetrySettings)
825+
return common.ValidateRetryPolicy(retryPolicy)
804826
}
805827

806828
func (v *commandAttrValidator) validateCrossNamespaceCall(

service/history/commandChecker_test.go

+36
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ func (s *commandAttrValidatorSuite) SetupTest() {
119119
DefaultActivityRetryPolicy: dynamicconfig.GetMapPropertyFnWithNamespaceFilter(common.GetDefaultRetryPolicyConfigOptions()),
120120
DefaultWorkflowRetryPolicy: dynamicconfig.GetMapPropertyFnWithNamespaceFilter(common.GetDefaultRetryPolicyConfigOptions()),
121121
EnableCrossNamespaceCommands: dynamicconfig.GetBoolPropertyFn(true),
122+
DefaultWorkflowTaskTimeout: dynamicconfig.GetDurationPropertyFnFilteredByNamespace(common.DefaultWorkflowTaskTimeout),
122123
}
123124
s.validator = newCommandAttrValidator(
124125
s.mockNamespaceCache,
@@ -213,6 +214,41 @@ func (s *commandAttrValidatorSuite) TestValidateUpsertWorkflowSearchAttributes()
213214
s.Equal(enumspb.WORKFLOW_TASK_FAILED_CAUSE_UNSPECIFIED, fc)
214215
}
215216

217+
func (s *commandAttrValidatorSuite) TestValidateContinueAsNewWorkflowExecutionAttributes() {
218+
executionTimeout := time.Hour
219+
workflowTypeName := "workflowType"
220+
taskQueue := "taskQueue"
221+
222+
attributes := &commandpb.ContinueAsNewWorkflowExecutionCommandAttributes{
223+
// workflow type name and task queue name should be retrieved from existing workflow info
224+
225+
// WorkflowRunTimeout should be shorten to execution timeout
226+
WorkflowRunTimeout: timestamp.DurationPtr(executionTimeout * 2),
227+
// WorkflowTaskTimeout should be shorten to max workflow task timeout
228+
WorkflowTaskTimeout: timestamp.DurationPtr(common.MaxWorkflowTaskStartToCloseTimeout * 2),
229+
}
230+
231+
executionInfo := &persistencespb.WorkflowExecutionInfo{
232+
WorkflowTypeName: workflowTypeName,
233+
TaskQueue: taskQueue,
234+
WorkflowExecutionTimeout: timestamp.DurationPtr(executionTimeout),
235+
}
236+
237+
fc, err := s.validator.validateContinueAsNewWorkflowExecutionAttributes(
238+
tests.Namespace,
239+
attributes,
240+
executionInfo,
241+
"index-name",
242+
)
243+
s.NoError(err)
244+
s.Equal(enumspb.WORKFLOW_TASK_FAILED_CAUSE_UNSPECIFIED, fc)
245+
246+
s.Equal(workflowTypeName, attributes.GetWorkflowType().GetName())
247+
s.Equal(taskQueue, attributes.GetTaskQueue().GetName())
248+
s.Equal(executionTimeout, *attributes.GetWorkflowRunTimeout())
249+
s.Equal(common.MaxWorkflowTaskStartToCloseTimeout, *attributes.GetWorkflowTaskTimeout())
250+
}
251+
216252
func (s *commandAttrValidatorSuite) TestValidateModifyWorkflowProperties() {
217253
namespace := namespace.Name("tests.Namespace")
218254
var attributes *commandpb.ModifyWorkflowPropertiesCommandAttributes

0 commit comments

Comments
 (0)