Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Horizontal Navigation Bar


Button Group

Button Hyperlink
titlePrevious
typestandard
urlhttps://confluence.ecmwf.int/display/ECFLOW/Add+Trigger
Button Hyperlink
titleUp
typestandard
urlhttps://softwareconfluence.ecmwf.int/wiki/display/ECFLOW/Going+Further
Button Hyperlink
titleNext
typestandard
urlhttps://confluence.ecmwf.int/display/ECFLOW/Add+an+event

...




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

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


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

...

trigger /test/f1/t1 == complete

...

Text

Code Block
languagebash
# 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

...

Code Block
languagepy
title$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",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")

What to do

  1. Edit the suite definition file to add the trigger.
  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. See the triggers by selecting t1 or t2.
  5. See the trigger relation by clicking on the trigger tab.
  6. Search any reference to t1 by using the search menu.
  7. Notice the wait icon on task t2.
  8. 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
    languagepybash
    titleCheck trigger expressionsIntroduce error in wait expression
    ecflow_client --wait="txxTrigger("t == complete")  # there is no node with name ttxx, this should abort the task


  9. Introduce an impossible expression, what is the effect?

    Code Block
    languagebash
    titleexpression that will never be satisfied
    ecflow_client --wait="1 == 0"  reported as an error


     

Horizontal Navigation Bar


Button Group

Button Hyperlink
titlePrevious
typestandard
urlhttps://confluence.ecmwf.int/display/ECFLOW/Add+Trigger
Button Hyperlink
titleUp
typestandard
urlhttps://softwareconfluence.ecmwf.int/wiki/display/ECFLOW/Going+Further
Button Hyperlink
titleNext
typestandard
urlhttps://confluence.ecmwf.int/display/ECFLOW/Add+an+event


...