...
Horizontal Navigation Bar | ||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
This is small a small follow up exercise where we will showing the use of embedded triggers.
These are triggers trigger expressions embedded within the scripts using --wait child command.
Whilst the expression is not not true, then the job will hold.
Where possible you should give preference to triggers on the definitions, since these are checked on creation, whereas embedded triggers are checked at run time.
Ecf Script
Add/amend the t2.ecf script
Code Block | ||
---|---|---|
| ||
%include <head.h>
ecflow_client --wait="t1 == complete" # wait for expression to become true
%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 endfamily endsuite |
Python
...
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")) 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") |
What to do
- 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 .
- 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.wait expression, the job should abort
Code Block language pybash title Check trigger expressions Introduce error in wait expression ecflow_client --wait="txxTrigger("t == complete") # there is no node with name ttxx, this should abort the task
Introduce an impossible expression, what is the effect?
Code Block language bash title expression that will never be satisfied ecflow_client --wait="1 == 0" reported as an error
Horizontal Navigation Bar | ||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
...