Sometimes you do not want to run a task when a certain condition is met.
In this case you can use the complete trigger keyword.
complete rather than running it.
It can be used in conjunction with a trigger. For example:
# Definition of the suite test. suite test edit ECF_INCLUDE "$HOME/course" edit ECF_HOME "$HOME/course" family f1 edit SLEEP 20 task t1 task t2 trigger t1 eq complete event a event b task t3 trigger t2:a task t4 trigger t2 eq complete complete t2:b endfamily endsuite
In python this would be:
#!/usr/bin/env python2.5 import os import ecflow def create_family_f1(): f1 = ecflow.Family("f1") f1.add_variable("SLEEP",20) f1.add_task("t1") t2 = f1.add_task("t2") t2.add_trigger("t1 eq complete") t2.add_event("a") t2.add_event("b") t3 = f1.add_task("t3") t3.add_trigger("t2:a") t4 = f1.add_task("t4") t4.add_trigger("t2 eq complete") t4.add_complete("t2:b") return f1 defs = ecflow.Defs("test.def") suite = defs.add_suite("test") suite.add_variable("ECF_INCLUDE",os.getenv("HOME") + "/course") suite.add_variable("ECF_HOME ",os.getenv("HOME") + "/course") suite.add_family( create_family_f1() )
Completes are used to declare dependencies between two tasks.
For instance, complete t2:b might indicate that a specific
event has not occurred so we do not need to run task t4.
and complete trigger expressions. If the complete trigger condition is correct,
the task will set itself complete.
complete trigger evaluation takes precedence over the trigger.
Completes can be between tasks, between families, or both.
What to do:
- Edit the suite definition file or python to add a complete to task t4
- Load the definition again
- Observe the tasks in ecFlowview
- See the triggers by selecting t4 and clicking on the icon
- See the trigger relation by clicking on the arrow
- See the triggers in the tree, using the Show menu
- Note the icon indicating that the task has not run
- You can modify task t2 to check that task t4 will run when the event is not set