...
Horizontal Navigation Bar | ||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
...
This is small follow up exercise where we will use embedded triggers.
These are triggers embedded within the scripts.
Whilst the expression is not true, then job will hold
Ecf Script
Add/amend the t2.ecf
Code Block | ||
---|---|---|
| ||
%include <head.h>
ecflow_client --wait=" |
In the previous exercise we saw that the two tasks were running simultaneously.
- A family is complete when all its tasks are complete
- A task will be started if its triggers and the triggers of all its parent families evaluate to true
...
t1 == complete |
...
"
%include <tail.h> |
Text
Code Block | ||
---|---|---|
| ||
# Definition of the suite test. suite test edit ECF_INCLUDE "$HOME/course" # replace '$HOME' with the path to your home directory edit ECF_HOME "$HOME/course" family f1 edit SLEEP 20 task t1 task t2 trigger t1 eq complete endfamily endsuite |
Python
The trigger expression can be checked, this is especially important when dealing with very large suites and complex triggers.
Code Block | ||||
---|---|---|---|---|
| ||||
import os from ecflow import Defs,Suite,Family,Task,Edit,Trigger def create_family_f1(): return Family("f1", Edit(SLEEP=20), Task("t1"), Task("t2",Trigger("t1 == complete"))) print("Creating suite definition") home = os.path.join(os.getenv("HOME"), "course") defs = Defs( Suite("test", Edit(ECF_INCLUDE=home,ECF_HOME=home), create_family_f1())) print(defs) print("check trigger expressions") check = defs.check() assert len(check) == 0, check print("Checking job creation: .ecf -> .job0") print(defs.check_job_creation()) print("Saving definition to file 'test.def'") defs.save_as_defs("test.def") |
...
- Edit the suite definition file to add the trigger.
- Replace the suite
python: python3 test.py ; python3 client.py
text: ecflow_client --suspend=/test ; ecflow_client --replace=/test test.def - Observe the tasks in ecflow_ui .
- See the triggers by selecting t1 or Notice the wait icon on task t2.
- See the trigger relation by clicking on the trigger tab.
- Search any reference to t1 by using the search menu.
Introduce an error in the trigger expression and ensure that this error is trapped. i.e. change trigger to.
Code Block language py title Check trigger expressions Trigger("t == complete") # there is no node with name t, this should be reported as an error
...