Variable inheritance

The previous section describes how to define a variable for a particular task. When all the tasks in a given family share the same variable value, the value can be defined at the family level. This shared value is then inherited by all the child nodes of the family – this is variable inheritance.

Variables are inherited from the closest parent node. This means that, going from top to bottom, if a variable is redefined lower in the tree, it is said to override the previously defined variable.

Defining the variables is an important part of suite design, considering that any kind of variable can be overridden, including generated variables. Opting to override a variable, in particular generated variables, might result in undesired effects (e.g. overridding ECF_HOST or ECF_PORT could prevent the tasks from contacting back the ecflow_server).

Update Suite Definition

Consider the following suite definition, where the variable SLEEP is defined at the level of the family f1.

# 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

Note

The variable SLEEP, in the example above, could have been defined at the level of the suite, achieving the same results.

Quiz

Considering the following suite, which includes several levels of families and tasks, determine the value of the variable SLEEP for each task.

suite test
   edit SLEEP 100
   family f1
      edit SLEEP 80
      task t1
      task t2
         edit SLEEP 9
      family g1
          edit SLEEP 89
          task x1
              edit SLEEP 10
          task x2
      endfamily
   endfamily
   family f2
     task t1
     task t2
         edit SLEEP 77
     family g2
          task x1
              edit SLEEP 12
          task x2
      endfamily
   endfamily
endsuite

Compare the value of the SLEEP used by each of the tasks in the following table:

node

SLEEP

/test/f1/t1

80

/test/f1/t2

9

/test/f1/g1/x1

10

/test/f1/g1/x2

89

/test/f2/t1

100

/test/f2/t2

77

/test/f2/g2/x1

12

/test/f2/g2/x2

100

What to do

  1. Modify the suite definition to include the variable SLEEP, as shown above.

  2. Replace the suite, using:

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