Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

Introduction

  • The Fork Instruction allows orders to be forked and joined to enable parallel processing in a workflow.
  • The Fork Instruction allows creation of a number of parallel branches that process further instructions and jobs.
    • Branches can include any number of instructions and jobs.
    • The max. number of parallel branches is limited to 15.
  • When an order enters a Fork Instruction then a child order is created for each branch. Each child order will pass the nodes in its branch independently of parallel child orders.
  • Child orders can return results to parent orders by passing variables.
  • While child orders are running, the parent order waits for its child orders to be completed, i.e. to arrive at the Join Instruction. The parent order therefore is assigned the WAITING state, see JS7 - Order State Transitions.
  • Note that child orders can take the role of parent orders in nested Fork Instructions.

Feature Video

This video explains how to create parallel jobs in a workflow that can be nested and joined.

Widget Connector
urlhttps://www.youtube.com/watch?v=9HUWk_nfROM&ab_channel=JobScheduler

Workflow Instruction: Fork/Join

Simple Fork/Join

Download Workflow Example (.json upload)pdwFork.json

...

  • The Fork Instruction is used for two parallel branches, the names of the branches can be specified.
  • After the child orders for both branches have arrived with the Join Instruction then the parent order will continue with the next node.
  • The Join If Failed property determines the behavior in the event of failed child orders:
    • If checked then failed child orders terminate immediately and cause the parent order to adopt the FAILED state.
    • If not checked then failed child orders will be halted and allow user intervention to resume execution from an node of the child order's branch.

Nested Fork/Join

Download Workflow Example: pwdForkNested.json

...

  • The Workflows View shows three levels of orders: the parent order sitting with the initial Fork Instruction and two levels of child orders passing their respective branches.
  • As soon as the inner child orders are completed then the outer level of parent orders continues and completes respectively.

Passing Variables from Fork Branches

Jobs in branches of a Fork Instruction can pass results to the parent order by use of variables, see JS7 - Order Variables:

...

  • Each branch of a Fork Instruction allows a pair of names and values for variables that are passed to the parent order to be specified:
    • For the parent order a variable with the given name and value is created.
    • Variable names have to be unique across branches, i.e. no two branches can return the same variable names.
    • Users are free to choose variable names for the parent order and assign variable values of the child order or constant values.
  • The Join Instruction adds any variables declared with branches to the parent order.

Error Handling

Note that child orders can take the role of parent orders in nested Fork Instructions.

Job Errors

Parent orders are not exposed to job errors as any instructions and jobs within the Fork Instruction are executed by child orders. Instead a parent order adopts the final state of its child orders.

...

  • Default behavior: If a job in a child order's branch fails then the child order is assigned the FAILED state and remains with the offending job node. Such child orders require user intervention to resume execution. When resuming a child order then it can restart from the same or from any previous or later node in the child order's branch. This includes the option to move a child order to the branch end.
    • Note that resuming a child order from its branch end will not modify its FAILED state that is adopted by the parent order.
  • Optional behavior: If a job in a child order's branch fails then the child order terminates immediately and the parent order is put to the FAILED state. This behavior can be activated by use of the Join if Failed flag of the Fork Instruction.

User Intervention

Parent Order Interventions

While child orders are running, the parent order waits for its child orders to be completed, i.e. to arrive at the Join Instruction. The parent order therefore is assigned the WAITING state, see JS7 - Order State Transitions.

  • If the parent order is suspended then child orders will continue to run. After joining child orders in the Join Instruction the parent order is put in a SUSPENDED state with the node following the Fork / Join Instruction.
  • If the parent order is cancelled then child orders will continue to run. After joining child orders in the Join Instruction the parent order's cancellation will become effective and it will leave the workflow with a FAILED history state. 

Suspending / Cancelling Child Orders

Child orders can individually be suspended or cancelled:

...

Consider that any operation to suspend or to cancel child orders work asynchronously as the jobs that are executed for child orders could be used with Agents on different servers. Therefore any bulk operation to suspend/cancel all child orders boil down to an individual operation and result per child order.

Resuming Child Orders

Child orders can be resumed if they are in a SUSPENDED or FAILED state.

...