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://software.ecmwf.int/wiki/display/ECFLOW/Going+Further
Button Hyperlink
titleNext
typestandard
urlhttps://confluence.ecmwf.int/display/ECFLOW/Add+an+event




This is  small follow up exercise where we will use embedded triggers.  

These are trigger expression embedded within the scripts using the --wait child command.

Whilst the expression is not  true, then job will hold

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"
%include <tail.h>


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
   endfamily
endsuite


Python

The trigger expression can be checked,  this is especially important when dealing with very large suites and complex triggers.

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"))
             
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 and ensure that abort the job

    Code Block
    languagebash
    titleIntroduce error in wait expression
    ecflow_client --wait="txx == complete"  # there is no node with name tax, this should abort the task


  6. Introduce an impossible expression, what is the effect. 

    Code Block
    ecflow_client --wait="1 == 0" # this expression will never be satisfied.


     

Horizontal Navigation Bar


Button Group

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