Suicide Triggers
Warning
Suicided triggers were needed in Cylc 7 and earlier to remove pre-spawned waiting tasks from graph branches not taken at runtime, which would stall the workflow.
However, Cylc 8 does not need suicide triggers for graph branching.
They remain supported, and documented, for backward compatibility and for a rare edge case.
Suicide triggers remove waiting tasks from the scheduler’s active active window at runtime.
They are activated just like normal task triggers but
they remove the downstream task (prefixed with !
) instead of triggering it
to run.
Here, the task bar
will be removed if foo
succeeds:
foo => !bar
Suicide triggers combine in the same way as normal triggers, so this graph:
foo => !baz
bar => !baz
is equivalent to this:
foo & bar => !baz
i.e. both foo
and bar
must succeed for baz
to be removed.
To remove a task after any one of several events, use an OR operator:
foo | bar => !baz
Note
At present, only active tasks that are waiting
(e.g. queued tasks) can be removed by cylc remove
.
Remaining Use Case
Suicide triggers may be needed to remove a waiting active task when it can be inferred from the status of another task that the external trigger will never be satisfied.
In the following example imagine that the two xtriggers watch two locations for the same file to appear. The file will be delivered to one location or the other but not to both, so if one xtrigger is satisfied the other will never be. The stuck waiting task can be removed with a suicide trigger, so that it doesn’t stall the workflow:
@xtrigger1 => A
@xtrigger2 => B
A => !B # If A succeeds, remove B
B => !A # If B succeeds, remove A