Embedded triggers

This is a small follow up exercise showing the use of embedded triggers. These are trigger expressions embedded within the scripts using –wait child command. Whilst the expression is not true, 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.

Listing 25 $HOME/course/test/f1/t2.ecf
%include <head.h>
ecflow_client --wait="t1 == complete" # wait for expression to become true
%include <tail.h>

Text

# 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

Listing 26 $HOME/course/test.py
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

  1. Edit the suite definition file.

  2. Replace the suite.

    Python: python3 test.py ; python3 client.py
    Text: ecflow_client --suspend=/test ;  ecflow_client --replace=/test test.def
  3. Observe the tasks in ecflow_ui .

  4. Notice the wait icon on task t2.

  5. Introduce an error in the wait expression, the job should abort:

    Listing 27 Introduce error in wait expression
    ecflow_client --wait="txx == complete"  # there is no node with name txx, this should abort the task
    
  6. Introduce an impossible expression, what is the effect?

    Listing 28 expression that will never be satisfied
    ecflow_client --wait="1 == 0"