Adding an event

If a task produces several results, it may be useful to start other tasks as soon as the first results are ready. For that, ecFlow introduces the concept of events.

An event is an indication that a task has reached a certain point in its execution. The task informs the ecflow_server of this by setting the event, at any point during task execution. Each event has a name, and a task may have several events.

Update Task Script

Create new tasks t3 and t4 that will be triggered by the events emitted in task t2. Create the task scripts for task t3 and task t4 by copying the script from t1.

To notify ecflow_server, the task t2 uses the ecflow_client with the --event option (this is one of the child commands).

Listing 31 Amend $HOME/course/test/f1/t2.ecf
%include <head.h>
echo "I will now sleep for %SLEEP% seconds"
sleep %SLEEP%
ecflow_client --event a       # Set the first event
sleep %SLEEP%                 # Sleep a bit more
ecflow_client --event b       # Set the second event
sleep %SLEEP%                 # A last nap...
%include <tail.h>

Update Suite Definition

Update the suite definition to add the events and the new tasks.

# Definition of the suite test.
suite test
  edit ECF_INCLUDE "{{HOME}}/course" # replace '{{HOME}}' appropriately
  edit ECF_HOME    "{{HOME}}/course"
  family f1
    edit SLEEP 20
    task t1
    task t2
      trigger t1 eq complete
      event a
      event b
    task t3
      trigger t2:a
    task t4
      trigger t2:b
  endfamily
endsuite

What to do

  1. Create the new task scripts t3.ecf and t4.ecf, as described above.

  2. Modify the task script t2.ecf to set the events.

  3. Modify the suite definition to add the events and the new tasks.

  4. Replace the suite, using:

    ecflow_client --suspend /test
    ecflow_client --replace /test test.def
    
  5. Observe the task execution in ecflow_ui.

  6. Inspect the triggers by selecting node t2 or t3 and then the Triggers tab