How a flownode is completed
A flownode completion can come:
-
from a specific work triggered by the Engine internally when the flownode arrive in the terminal state.
Completion of a Flownode
Flow Node is contained in a parent flownode
This can happen in case :
-
Loop
-
Multi instance
-
Sub Tasks (Boundary events are at the "same level" as normal flownodes, their parent being the process and not the flownode they are attached to.)
When a child finishes, the childFinished() method is called. It :
-
Archives & deletes the child flownode
-
decrements the token count of the parent
-
calls notifyChildFlowNodeHasFinished on parent activity state that returns whether the parent should continue (ie. that all its children have finished. Exception to this are manual tasks).
-
calls stepforward() on the parent if the parent should continue. This is done in the same transaction (ie. we don’t create a separate work for that).
Flow Node is directly contained in a process instance
This is the nominal case. The childFinished() method (of the processExecutor) is called:
-
The method executeValidOutgoingTransitionsAndUpdateTokens() is called on the process defintion.
-
If it returns false, nothing more is done and the method returns. Potentially, works have been registered to execute the next flownodes.
-
If it returns true, the flownode that finished was the last flownode of the process, and we terminate the process.