Versions Compared

Key

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


Horizontal Navigation Bar


Button Group

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


Sometimes a task should not be run when a certain condition is met.
The condition can be signalled by an event. For example, event t2:b
might indicate that task t2 did not manage to produce the expected result, so
we do not need to run task t4.
In this case, you can use the complete expression keyword.
This has a similar syntax to the trigger keyword but sets a task
complete rather than running it.
When ecflow_server tries to start a task, it evaluates the trigger
and complete expression s. If the complete expression condition is correct,
the task will set itself complete.

complete expression evaluation takes precedence over the trigger.

Completes can be between tasks, between families, or both.

It can be used in conjunction with a trigger. For example:
  

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   # task t2 will only start when task t1 is complete
         event a                  # task t2 will set an event a
         event b                  # task t2 will set an event b
     task t3
         trigger t2:a             # task t2t3 will start when event a is set in task t2
     task t4
         trigger t2 eq complete   # task t4 will start when task t2 is complete
         complete t2:b            # task t4 will complete if event b is set isin task t2
   endfamily
endsuite

 


Python

Python

#!/usr/bin/env python2.7
Code Block
languagepy
title$HOME/course/test.py
import os
import
from ecflow import Defs,Suite,Family,Task,Edit,Trigger,Complete,Event

def create_family_f1():
    
f1 =
return 
ecflow.
Family("f1"
)
,
    
f1.add_variable("SLEEP",
            Edit(SLEEP= 20),
    
f1.add_task
            Task("t1"),
         
t2
      
=
 
f1.add_task
Task("t2"
)
,
                
    
t2.add_trigger
Trigger("t1 
eq
== complete")
,
                    
t2.add_event
Event("a"), 
     
t2.add_event
               Event("b")),
      
f1.add_task
          Task("t3"
).add_trigger
,
                    Trigger("t2:a")),
          
    
t4
 
=
 
f1.add_task
Task("t4"
)
,
              
t4.add_trigger
      Trigger("t2 
eq
== complete"), 

                    
t4.add_complete
Complete("t2:b")))

 
return
 
f1
      
print
("Creating suite definition")  

defs
home = 
ecflow.Defs() suite = defs.add_suite("test") suite.add_variable("ECF_INCLUDE",
os.path.join(os.getenv("HOME"),
 
 "course")
) suite.add_variable("ECF_HOME", os.path.join(os.getenv("HOME"),  "course")) suite.add_family(

defs = Defs( 
        Suite("test",
            Edit(ECF_INCLUDE=home,ECF_HOME=home),
            create_family_f1())
)
print(defs) 
defs


print
("Checking job creation: .ecf -> .job0")  

print
(defs.check_job_creation())

print
"Checking trigger expressions" print defs.check
(
) print
"Saving definition to file 'test.def'")
defs.save_as_defs("test.def")

What to do

  1. Update test.def or test.py to add a complete expression to task t4
  2. Replace the suite
    python:  python python3 test.py; python 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 t4
  5. See the trigger relation by clicking on the arrow
  6. See the triggers in the tree, using the Show menu
  7. Note the icon indicating that the task has not run
  8. You can To check the triggers modify task t2 to check that so that event b is not triggered;  task t4 will should run when the event is not set t2 completes.
        
Horizontal Navigation Bar


Button Group

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


...