Hi!
I am using the go-sdk.
I have a parent workflow that will create multiple child workflows. I want the child workflows to run async. So I set the parent policy of each of the child workflow values to be PARENT_CLOSE_POLICY_ABANDON
. Then I call GetChildWorkflowExecution().Get(ctx, nil)
on each of the child workflows to ensure they are started before finishing the parent workflow, as specified here.
The parent workflow will run on a cron interval to start the child workflows. I only want 1 instance of each child workflow to be running at a time, so I use the workflow ID reuse policy value WORKFLOW_ID_REUSE_POLICY_ALLOW_DUPLICATE
when starting the workflows.
The problem I am running into is when the parent workflow begins and there is already a child workflow running. I will try to execute a new child workflow using the same workflow ID of a child workflow that is already running. When I call GetChildWorkflowExecution().Get(ctx, nil)
on the ChildWorkflowFuture it will just block indefinitely.
In the temporal UI I can see in the history of the parent workflow it says START_CHILD_WORKFLOW_EXECUTION_FAILED_CAUSE_WORKFLOW_ALREADY_EXISTS
.
How would I go about actually determining if the workflow execution fails? I do not want to call Get()
on the ChildWorkflowFuture as I do not want to block until each the child workflows are finished, I only want to block until it is started.