Workflow implementation
On the Python side, a workflow is orchestrated by a subclass of
Workflow, which derives from BaseTask and has its own subclass
hierarchy.
When instantiating a “Workflow”, a new WorkRequest is created with:
task_typeset to"workflow"task_namepointing to theWorkflowsubclass used to orchestratetask_dataset to the workflow parameters instantiated from the template (or from the parent workflow)
This WorkRequest acts as the root of the WorkRequest hierarchy
for the running workflow.
The Workflow class runs on the server with full database access
and is in charge of:
on instantiation, laying out an execution plan under the form of a directed acyclic graph of newly created
WorkRequestinstances.analyzing the results of any completed
WorkRequestin the graphpossibly extending/modifying the graph after this analysis
WorkRequest elements in a Workflow can only depend among each other, and
cannot have dependencies on WorkRequest elements outside the workflow.
They may depend on work requests in other sub-workflows that are part of the
same root workflow.
All the child work requests start in the blocked status using the deps
unblock strategy. When the Workflow WorkRequest is ready to run, all the
child WorkRequest elements that don’t have any further dependencies can
immediately start.