1207
}
1208
1210
>
metrics.HeaderSize.With(metricsHandler).Record(int64(attr.GetHeader().Size()))
1211
>
if err := handler.sizeLimitChecker.checkIfPayloadSizeExceedsLimit(
1212
>
metrics.CommandTypeTag(enumspb.COMMAND_TYPE_START_CHILD_WORKFLOW_EXECUTION.String()),
1213
>
attr.GetInput().Size(),
1214
>
"StartChildWorkflowExecutionCommandAttributes. Input exceeds size limit.",
1215
>
); err != nil {
1216
return nil, handler.terminateWorkflow(enumspb.WORKFLOW_TASK_FAILED_CAUSE_BAD_START_CHILD_EXECUTION_ATTRIBUTES, err)
1217
}
1218
1220
>
attr.GetMemo(),
1221
>
metrics.CommandTypeTag(enumspb.COMMAND_TYPE_START_CHILD_WORKFLOW_EXECUTION.String()),
1222
>
"StartChildWorkflowExecutionCommandAttributes.Memo exceeds size limit.",
1223
>
); err != nil {
1224
return nil, handler.terminateWorkflow(enumspb.WORKFLOW_TASK_FAILED_CAUSE_BAD_START_CHILD_EXECUTION_ATTRIBUTES, err)
1225
}
1226
1227
// search attribute validation must be done after unaliasing keys
1229
>
attr.GetSearchAttributes(),
1230
>
targetNamespace,
1231
>
metrics.CommandTypeTag(enumspb.COMMAND_TYPE_START_CHILD_WORKFLOW_EXECUTION.String()),
1232
>
); err != nil {
1233
return nil, handler.terminateWorkflow(enumspb.WORKFLOW_TASK_FAILED_CAUSE_BAD_START_CHILD_EXECUTION_ATTRIBUTES, err)
1234
}
1235
1236
// child workflow limit
1238
return nil, handler.failWorkflowTask(enumspb.WORKFLOW_TASK_FAILED_CAUSE_PENDING_CHILD_WORKFLOWS_LIMIT_EXCEEDED, err)
1239
}
1240
1242
>
if enabled {
1243
>
enums.SetDefaultParentClosePolicy(&attr.ParentClosePolicy)
1244
>
} else {
1245
attr.ParentClosePolicy = enumspb.PARENT_CLOSE_POLICY_ABANDON
1246
}
1247
1249
>
1250
>
event, _, err := handler.mutableState.AddStartChildWorkflowExecutionInitiatedEvent(
1251
>
handler.workflowTaskCompletedID, attr, targetNamespaceID,
1252
>
)
1253
>
if err == nil {
1254
>
// Keep track of all child initiated commands in this workflow task to validate request cancel commands
1255
>
handler.initiatedChildExecutionsInBatch[attr.GetWorkflowId()] = struct{}{}
1256
>
}
1257
>
return event, err
1258
}
1259