File: using-embedded-triggers.rst

package info (click to toggle)
ecflow 5.15.2-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 51,868 kB
  • sloc: cpp: 269,341; python: 22,756; sh: 3,609; perl: 770; xml: 333; f90: 204; ansic: 141; makefile: 70
file content (92 lines) | stat: -rw-r--r-- 2,555 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
.. index::
   single: embedded triggers (tutorial)

.. _tutorial-embedded-triggers:  
   
Using embedded triggers
=======================

This section provides a exercise showing the use of embedded triggers.
These are trigger expressions embedded within the task scrips using the :code:`--wait` command.
Whilst the expression is **not** true, the job will hold i.e. continue to wait.

Whenever possible, giving preference to triggers on the :term:`suite definition` is considered
a better approach, as this allows extra validation upon creation, whereas embedded triggers are
checked at run time.

Update Task Script
------------------

Consider the :term:`task` :code:`t2.ecf` script as follows:

.. code-block:: shell
    :caption: $HOME/course/test/f1/t2.ecf

    %include <head.h>
    ecflow_client --wait="t1 == complete" # wait for expression to become true
    %include <tail.h>

Update Suite Definition
-----------------------

Consider the following :term:`suite definition`, with no :term:`trigger` on task **t2**.

.. tabs::

    .. tab:: Text

        .. code-block:: shell

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

    .. tab:: Python

        .. literalinclude:: src/embedded-triggers.py
           :language: python
           :caption: $HOME/course/test.py

**What to do**

#. Modify the task script and the suite definition as shown above.
#. Replace the :term:`suite`, using:

   .. tabs::

      .. tab:: Text

         .. code-block:: shell

            ecflow_client --suspend /test
            ecflow_client --replace /test test.def

      .. tab:: Python

         .. code-block:: shell

            python3 test.py
            python3 client.py

#. Observe the tasks in :term:`ecflow_ui`.
#. Notice the wait icon on task t2.
#. Introduce an error in the wait expression and requeue the suite. Observe how the job now aborts:

   .. code-block:: shell
      :caption: Introduce error in wait expression

      ecflow_client --wait="t == complete"  # Error: no node with name `t`

#. Introduce an impossible expression in the wait expression and requeue the suite. What is the effect?

   .. code-block:: shell
      :caption: expression that will never be satisfied

      ecflow_client --wait="1 == 0"