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_type
set to"workflow"
task_name
pointing to theWorkflow
subclass used to orchestratetask_data
set 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
WorkRequest
instances.analyzing the results of any completed
WorkRequest
in 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.