Versions Compared

Key

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

<div class="section" id="glossary">

<span id="index-0"></span><span id="id1"></span>

<dl class="glossary docutils">

<dt id="term-aborted">aborted</dt>

<dd><p class="first">Is a <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> <a class="reference internal" href="#term-status"><em class="xref std std-term">status</em></a>.</p>

<p class="last">When the ECF_JOB_CMD fails or the <a class="reference internal" href="#term-job-file"><em class="xref std std-term">job file</em></a> sends a <a class="reference internal" href="#term-ecf-client"><em class="xref std std-term">ecf_client</em></a> &#8211;abort <a class="reference internal" href="#term-child-command"><em class="xref std std-term">child command</em></a>, then

the task is placed into a aborted state.</p>

</dd>

<dt id="term-active">active</dt>

<dd><p class="first">Is a <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> <a class="reference internal" href="#term-status"><em class="xref std std-term">status</em></a>.</p>

<p class="last">If <a class="reference internal" href="#term-job-creation"><em class="xref std std-term">job creation</em></a> was successful, and <a class="reference internal" href="#term-job-file"><em class="xref std std-term">job file</em></a> has started, then the <a class="reference internal" href="#term-ecf-client"><em class="xref std std-term">ecf_client</em></a> &#8211;init

<a class="reference internal" href="#term-child-command"><em class="xref std std-term">child command</em></a> is received by the <a class="reference internal" href="#term-ecf-server"><em class="xref std std-term">ecf_server</em></a> and the <a class="reference internal" href="#term-task"><em class="xref std std-term">task</em></a> is placed into a active state</p>

</dd>

<dt id="term-autocancel">autocancel</dt>

<dd>autocancel is a way to automatically delete a <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> which has completed.

For BNF see <a class="reference internal" href="/wiki/display/ECFLOW/Definition+file+Grammer#grammar-token-autocancel"><tt class="xref std std-token docutils literal"><span class="pre">autocancel</span></tt></a></dd>

<dt id="term-child-command">child command</dt>

<dd><p class="first">Child command&#8217;s(or task requests) are called from within the <a class="reference internal" href="#term-ecf-script"><em class="xref std std-term">ecf script</em></a> files. They include:</p>

<blockquote class="last">

<div><p><a class="reference internal" href="#term-ecf-client"><em class="xref std std-term">ecf_client</em></a>  &#8211;init      # Sets the <a class="reference internal" href="#term-task"><em class="xref std std-term">task</em></a> to the active <a class="reference internal" href="#term-status"><em class="xref std std-term">status</em></a></p>

<p><a class="reference internal" href="#term-ecf-client"><em class="xref std std-term">ecf_client</em></a>  &#8211;event     # Set an event</p>

<p><a class="reference internal" href="#term-ecf-client"><em class="xref std std-term">ecf_client</em></a>  &#8211;meter     # Change a meter</p>

<p><a class="reference internal" href="#term-ecf-client"><em class="xref std std-term">ecf_client</em></a>  &#8211;label     # Change a label</p>

<p><a class="reference internal" href="#term-ecf-client"><em class="xref std std-term">ecf_client</em></a>  &#8211;msg       # Send a message to ecFlow-logfile</p>

<p><a class="reference internal" href="#term-ecf-client"><em class="xref std std-term">ecf_client</em></a>  &#8211;wait      # wait for a expression to evaluate</p>

<p><a class="reference internal" href="#term-ecf-client"><em class="xref std std-term">ecf_client</em></a>  &#8211;abort     # Sets the <a class="reference internal" href="#term-task"><em class="xref std std-term">task</em></a> to the abort <a class="reference internal" href="#term-status"><em class="xref std std-term">status</em></a></p>

<p><a class="reference internal" href="#term-ecf-client"><em class="xref std std-term">ecf_client</em></a>  &#8211;complete  # Sets the <a class="reference internal" href="#term-task"><em class="xref std std-term">task</em></a> to the complete <a class="reference internal" href="#term-status"><em class="xref std std-term">status</em></a></p>

</div></blockquote>

</dd>

<dt id="term-clock">clock</dt>

<dd><p class="first">A clock is an attribute of a <a class="reference internal" href="#term-suite"><em class="xref std std-term">suite</em></a>.</p>

<p>A clock always runs in phase with the system clock (UTC in UNIX) but can have any offset from the system clock.</p>

<p>The clock must be either hybrid or real:</p>

<blockquote>

<div><p>Under a hybrid clock, the date never changes unless specifically altered or unless the suite restarts,

either automatically or from a begin command.</p>

<p>Under a real clock, the date advances by one day at midnight.</p>

</div></blockquote>

<p class="last">Time and date <a class="reference internal" href="#term-dependencies"><em class="xref std std-term">dependencies</em></a> work a little differently under the two clocks.

The default clock type is hybrid.

For BNF see <a class="reference internal" href="/wiki/display/ECFLOW/Definition+file+Grammer#grammar-token-clock"><tt class="xref std std-token docutils literal"><span class="pre">clock</span></tt></a></p>

</dd>

<dt id="term-complete">complete</dt>

<dd><p class="first">Is a <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> <a class="reference internal" href="#term-status"><em class="xref std std-term">status</em></a>.</p>

<p>The node can be set to complete:</p>

<blockquote class="last">

<div><p>By the <a class="reference internal" href="#term-complete-trigger"><em class="xref std std-term">complete trigger</em></a></p>

<p>At job end when the <a class="reference internal" href="#term-task"><em class="xref std std-term">task</em></a> receives the <a class="reference internal" href="#term-ecf-client"><em class="xref std std-term">ecf_client</em></a> &#8211;complete <a class="reference internal" href="#term-child-command"><em class="xref std std-term">child command</em></a></p>

</div></blockquote>

</dd>

<dt id="term-complete-trigger">complete trigger</dt>

<dd><p class="first">Force a node to be complete <strong>if</strong> the expression evaluates, without running any of the nodes.</p>

<p class="last">This allows you to have tasks in the suite which a run only if others fail.

In practice the node would need to have a <a class="reference internal" href="#term-trigger"><em class="xref std std-term">trigger</em></a> also.</p>

</dd>

<dt id="term-cron">cron</dt>

<dd>Like time, cron defines time dependency for a <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a>, but it can allow the <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> to be repeated indefinitely.

For BNF see <a class="reference internal" href="/wiki/display/ECFLOW/Definition+file+Grammer#grammar-token-cron"><tt class="xref std std-token docutils literal"><span class="pre">cron</span></tt></a></dd>

<dt id="term-date">date</dt>

<dd><p class="first">This defines a date dependency for a node.</p>

<p class="last">There can be multiple date dependencies.

The European format is used for dates, which is: dd.mm.yy as in 31.12.2007.

Any of the three number fields can be expressed with a wildcard <cite>*</cite> to mean any valid value.

Thus, 01.*.* means the first day of every month of every year.

For BNF see <a class="reference internal" href="/wiki/display/ECFLOW/Definition+file+Grammer#grammar-token-date"><tt class="xref std std-token docutils literal"><span class="pre">date</span></tt></a></p>

</dd>

<dt id="term-day">day</dt>

<dd><p class="first">This defines a day dependency for a  node.</p>

<p class="last">There can be multiple day dependencies.

For BNF see <a class="reference internal" href="/wiki/display/ECFLOW/Definition+file+Grammer#grammar-token-day"><tt class="xref std std-token docutils literal"><span class="pre">day</span></tt></a></p>

</dd>

<dt id="term-defstatus">defstatus</dt>

<dd><p class="first">Defines the default status for a task/family to be assigned to the <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> when the begin command is issued.</p>

<p class="last">By default <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> gets queued when you use begin on a <a class="reference internal" href="#term-suite"><em class="xref std std-term">suite</em></a>.

defstatus is useful in preventing suites from running automatically once begun or in setting

tasks complete so they can be run selectively.

For BNF see <a class="reference internal" href="/wiki/display/ECFLOW/Definition+file+Grammer#grammar-token-defstatus"><tt class="xref std std-token docutils literal"><span class="pre">defstatus</span></tt></a></p>

</dd>

<dt id="term-dependencies">dependencies</dt>

<dd><p class="first">Dependencies are attributes of node. They include <a class="reference internal" href="#term-trigger"><em class="xref std std-term">trigger</em></a>, <a class="reference internal" href="#term-date"><em class="xref std std-term">date</em></a>, <a class="reference internal" href="#term-day"><em class="xref std std-term">day</em></a>, <a class="reference internal" href="#term-time"><em class="xref std std-term">time</em></a>

<a class="reference internal" href="#term-today"><em class="xref std std-term">today</em></a>, <a class="reference internal" href="#term-cron"><em class="xref std std-term">cron</em></a>, <a class="reference internal" href="#term-complete-trigger"><em class="xref std std-term">complete trigger</em></a>, <a class="reference internal" href="#term-inlimit"><em class="xref std std-term">inlimit</em></a> and  <a class="reference internal" href="#term-limit"><em class="xref std std-term">limit</em></a>.</p>

<p class="last">A <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> that is dependent can not be started as long as some dependency is holding it.</p>

</dd>

<dt id="term-directives">directives</dt>

<dd><p class="first">directives are expanded during <a class="reference internal" href="#term-pre-processing"><em class="xref std std-term">pre-processing</em></a>. Examples include:</p>

<blockquote class="last">

<div><p>%include &lt;filename&gt;</p>

<p>%comment : start&#8217;s a comment, which is ended by %end directive. The section enclosed by %comment - %end is removed during :term:` pre-processing`</p>

<p>%manual : start&#8217;s a manual, which is ended by %end directive. The section enclosed by %manual - %end is removed during :term:` pre-processing`

However the manual directive is used to create the <a class="reference internal" href="#term-manual-page"><em class="xref std std-term">manual page</em></a></p>

<p>%nopp  : stops pre-processing until a line stating with %end is found</p>

<p>%end : End pre-processing of %comment, %manual or %nopp</p>

<p>%VAR% : This direct&#8217;s the server to perform <a class="reference internal" href="#term-variable-substitution"><em class="xref std std-term">variable substitution</em></a>.

This involves searching for a <a class="reference internal" href="#term-suite-definition"><em class="xref std std-term">suite definition</em></a> <a class="reference internal" href="#term-variable"><em class="xref std std-term">variable</em></a> or generated <a class="reference internal" href="#term-variable"><em class="xref std std-term">variable</em></a>

of name VAR and substituting in the value of the variable.</p>

</div></blockquote>

</dd>

<dt id="term-ecf-script">ecf script</dt>

<dd><p class="first">The ecFlow script refers to an ‘.ecf’ file.</p>

<p class="last">This is similar to a UNIX shell script.

The differences, however, includes the addition of “C” like pre-processing <a class="reference internal" href="#term-directives"><em class="xref std std-term">directives</em></a> and ecFlow <a class="reference internal" href="#term-variable"><em class="xref std std-term">variable</em></a>&#8216;s.</p>

</dd>

<dt id="term-ecf-client">ecf_client</dt>

<dd><p class="first">This executable is a command line program; it is used for all communication with the server.</p>

<p>To see the full range of commands that can be sent to the <a class="reference internal" href="#term-ecf-server"><em class="xref std std-term">ecf_server</em></a> type the following in a UNIX shell:</p>

<blockquote>

<div>ecf_client &#8211;help</div></blockquote>

<p class="last">This functionality is also provided by the <a class="reference internal" href="/wiki/display/ECFLOW/ecFlow+Python+Api#python-api"><em>ecFlow Python Api</em></a> see class <a class="reference internal" href="/wiki/display/ECFLOW/ecFlow+Python+Api#ecflow.Client" title="ecflow.Client"><tt class="xref py py-class docutils literal"><span class="pre">ecflow.Client</span></tt></a></p>

</dd>

<dt id="term-ecf-server">ecf_server</dt>

<dd><p class="first">This executable is the server.</p>

<p>It is responsible for <a class="reference internal" href="#term-scheduling"><em class="xref std std-term">scheduling</em></a> the jobs and responding to <a class="reference internal" href="#term-ecf-client"><em class="xref std std-term">ecf_client</em></a> requests</p>

<p>Multiple servers can be run on the same machine/host providing they are assigned a unique port number.</p>

<p>The server record&#8217;s all request&#8217;s in the log file.</p>

<p>The server will periodically write out a check point file.</p>

<p class="last">A check point file is the <a class="reference internal" href="#term-suite-definition"><em class="xref std std-term">suite definition</em></a> with additional state information.</p>

</dd>

<dt id="term-ecflow">ecFlow</dt>

<dd>ecFlow is the Supervisor Monitoring Scheduler software in place at ECMWF

that helps computer jobs design, submission and monitoring both in

the research and the operations departments.</dd>

<dt id="term-ecflowview">ecFlowview</dt>

<dd><p class="first">ecFlowview executable is the GUI based client, that is used to visualise and monitor</p>

<blockquote class="last">

<div><p>The hierarchical structure of the <a class="reference internal" href="#term-suite-definition"><em class="xref std std-term">suite definition</em></a></p>

<p>state changes in the <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a>&#8216;s and the <a class="reference internal" href="#term-ecf-server"><em class="xref std std-term">ecf_server</em></a>, using colour coding</p>

<p>Attributes of the nodes and any <a class="reference internal" href="#term-dependencies"><em class="xref std std-term">dependencies</em></a></p>

<p><a class="reference internal" href="#term-ecf-script"><em class="xref std std-term">ecf script</em></a> file and the corresponding <a class="reference internal" href="#term-job-file"><em class="xref std std-term">job file</em></a></p>

</div></blockquote>

</dd>

<dt id="term-event">event</dt>

<dd><p class="first">The purpose of an event is to signal partial completion of a <a class="reference internal" href="#term-task"><em class="xref std std-term">task</em></a> and to be able to

trigger another job which is waiting for this partial completion.</p>

<p>Only tasks can have events and they can be considered as an attribute of a <a class="reference internal" href="#term-task"><em class="xref std std-term">task</em></a>.</p>

<p>There can be many events and they are displayed as nodes.</p>

<p class="last">An event has a number and possibly a name. If it is only defined as a number,

its name is the text representation of the number without leading zeroes.

For BNF see <a class="reference internal" href="/wiki/display/ECFLOW/Definition+file+Grammer#grammar-token-event"><tt class="xref std std-token docutils literal"><span class="pre">event</span></tt></a></p>

</dd>

<dt id="term-extern">extern</dt>

<dd><p class="first">This allows an external <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> to be used in a <a class="reference internal" href="#term-trigger"><em class="xref std std-term">trigger</em></a> expression.</p>

<p>All <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a>&#8216;s in <a class="reference internal" href="#term-trigger"><em class="xref std std-term">trigger</em></a>&#8216;s must be known to <a class="reference internal" href="#term-ecf-server"><em class="xref std std-term">ecf_server</em></a> by the end of the load command.

No cross-suite <a class="reference internal" href="#term-dependencies"><em class="xref std std-term">dependencies</em></a> are allowed unless the names of tasks outside the suite are declared as external.

An external <a class="reference internal" href="#term-trigger"><em class="xref std std-term">trigger</em></a> reference is considered unknown if it is not defined when the <a class="reference internal" href="#term-trigger"><em class="xref std std-term">trigger</em></a> is evaluated.

You are strongly advised to avoid cross-suite <a class="reference internal" href="#term-dependencies"><em class="xref std std-term">dependencies</em></a>.</p>

<p class="last">Families and suites that depend on one another should be placed in a single <a class="reference internal" href="#term-suite"><em class="xref std std-term">suite</em></a>.

If you think you need cross-suite dependencies, you should consider merging the suites

together and have each as a top-level family in the merged suite.

For BNF see <a class="reference internal" href="/wiki/display/ECFLOW/Definition+file+Grammer#grammar-token-extern"><tt class="xref std std-token docutils literal"><span class="pre">extern</span></tt></a></p>

</dd>

<dt id="term-family">family</dt>

<dd><p class="first">Is a <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> in a <a class="reference internal" href="#term-suite-definition"><em class="xref std std-term">suite definition</em></a>.</p>

<p>A family is a collection of <a class="reference internal" href="#term-task"><em class="xref std std-term">task</em></a>&#8216;s and families.</p>

<p class="last">Typically you place tasks that are related to each other inside the same family, analogous to the way you

create directories to contain related files.

For BNF see <a class="reference internal" href="/wiki/display/ECFLOW/Definition+file+Grammer#grammar-token-family"><tt class="xref std std-token docutils literal"><span class="pre">family</span></tt></a></p>

</dd>

<dt id="term-halted">halted</dt>

<dd><p class="first">Is a <a class="reference internal" href="#term-ecf-server"><em class="xref std std-term">ecf_server</em></a> state</p>

<p>The following tables reflects the server capabilities in the different states</p>

<table border="1" class="last docutils">

<colgroup>

<col width="22%" />

<col width="16%" />

<col width="16%" />

<col width="19%" />

<col width="26%" />

</colgroup>

<thead valign="bottom">

<tr><th class="head">State</th>

<th class="head">User Request</th>

<th class="head">Task Request</th>

<th class="head">Job Scheduling</th>

<th class="head">Auto-Check-pointing</th>

</tr>

</thead>

<tbody valign="top">

<tr><td><a class="reference internal" href="#term-running"><em class="xref std std-term">running</em></a></td>

<td>yes</td>

<td>yes</td>

<td>yes</td>

<td>yes</td>

</tr>

<tr><td><a class="reference internal" href="#term-shutdown"><em class="xref std std-term">shutdown</em></a></td>

<td>yes</td>

<td>yes</td>

<td>no</td>

<td>yes</td>

</tr>

<tr><td><a class="reference internal" href="#term-halted"><em class="xref std std-term">halted</em></a></td>

<td>yes</td>

<td>no</td>

<td>no</td>

<td>no</td>

</tr>

</tbody>

</table>

</dd>

<dt id="term-inlimit">inlimit</dt>

<dd><p class="first">The inlimit works in conjunction with <a class="reference internal" href="#term-limit"><em class="xref std std-term">limit</em></a> for providing simple load management</p>

<p class="last">inlimit is added to the <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> that needs to be limited.</p>

</dd>

<dt id="term-job-creation">job creation</dt>

<dd><p class="first">The process of job creation includes:</p>

<blockquote>

<div><p>o Locating <a class="reference internal" href="#term-ecf-script"><em class="xref std std-term">ecf script</em></a> files , corresponding to the <a class="reference internal" href="#term-task"><em class="xref std std-term">task</em></a> in the <a class="reference internal" href="#term-suite-definition"><em class="xref std std-term">suite definition</em></a></p>

<p>o <a class="reference internal" href="#term-pre-processing"><em class="xref std std-term">pre-processing</em></a></p>

</div></blockquote>

<p>The steps above transforms an <a class="reference internal" href="#term-ecf-script"><em class="xref std std-term">ecf script</em></a> to a <a class="reference internal" href="#term-job-file"><em class="xref std std-term">job file</em></a> that can be submitted.</p>

<p>The running jobs will communicate back to the <a class="reference internal" href="#term-ecf-server"><em class="xref std std-term">ecf_server</em></a> by calling <a class="reference internal" href="#term-child-command"><em class="xref std std-term">child command</em></a>&#8216;s.</p>

<p class="last">This causes <a class="reference internal" href="#term-status"><em class="xref std std-term">status</em></a> changes on the <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a>&#8216;s in the <a class="reference internal" href="#term-ecf-server"><em class="xref std std-term">ecf_server</em></a> and flags can be set to indicate various events.</p>

</dd>

<dt id="term-job-file">job file</dt>

<dd><p class="first">The job file is created by the <a class="reference internal" href="#term-ecf-server"><em class="xref std std-term">ecf_server</em></a> during <a class="reference internal" href="#term-job-creation"><em class="xref std std-term">job creation</em></a>.</p>

<p>It is derived from the <a class="reference internal" href="#term-ecf-script"><em class="xref std std-term">ecf script</em></a> after expanding the pre-processing <a class="reference internal" href="#term-directives"><em class="xref std std-term">directives</em></a>.</p>

<p class="last">It has the extension &#8221;.job{try number}&#8221;, i.e. t1.job1</p>

</dd>

<dt id="term-label">label</dt>

<dd>A label has a name and a value and is a way of displaying information in <a class="reference internal" href="#term-ecflowview"><em class="xref std std-term">ecFlowview</em></a>

For BNF see <a class="reference internal" href="/wiki/display/ECFLOW/Definition+file+Grammer#grammar-token-label"><tt class="xref std std-token docutils literal"><span class="pre">label</span></tt></a></dd>

<dt id="term-late">late</dt>

<dd><p class="first">Define a tag for a node to be late.</p>

<p class="last">Suites cannot be late, but you can define a late tag

for submitted in a suite, to be inherited by the families and tasks.

When a node is classified as being late, the only action <a class="reference internal" href="#term-ecf-server"><em class="xref std std-term">ecf_server</em></a> takes is to set a flag.

<a class="reference internal" href="#term-ecflowview"><em class="xref std std-term">ecFlowview</em></a> will display these alongside the <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> name as an icon (and optionally pop up a window).

For BNF see <a class="reference internal" href="/wiki/display/ECFLOW/Definition+file+Grammer#grammar-token-late"><tt class="xref std std-token docutils literal"><span class="pre">late</span></tt></a></p>

</dd>

<dt id="term-limit">limit</dt>

<dd>limit provides a means of providing simple load management by say limiting the number

of tasks submitted to a specific server.

Typically you either define limits on <a class="reference internal" href="#term-suite"><em class="xref std std-term">suite</em></a> level or define a separate suite to

hold limits so that they can be used by multiple suites.

For BNF see <a class="reference internal" href="/wiki/display/ECFLOW/Definition+file+Grammer#grammar-token-limit"><tt class="xref std std-token docutils literal"><span class="pre">limit</span></tt></a> and <a class="reference internal" href="#term-inlimit"><em class="xref std std-term">inlimit</em></a></dd>

<dt id="term-manual-page">manual page</dt>

<dd><p class="first">Manual pages are part of the <a class="reference internal" href="#term-ecf-script"><em class="xref std std-term">ecf script</em></a>.</p>

<p class="last">This is to ensure that the manual page is updated when the script is updated.

The manual page is a very important operational tool allowing you to view a description of a task,

and possibly describing solutions to common problems.

The <a class="reference internal" href="#term-pre-processing"><em class="xref std std-term">pre-processing</em></a> can be used to extract the manual page from the script file and is visible in <a class="reference internal" href="#term-ecflowview"><em class="xref std std-term">ecFlowview</em></a>.

The manual page is the text contained within the %manual and %end <a class="reference internal" href="#term-directives"><em class="xref std std-term">directives</em></a>.

They can be seen using the manual button on <a class="reference internal" href="#term-ecflowview"><em class="xref std std-term">ecFlowview</em></a>.</p>

</dd>

<dt id="term-meter">meter</dt>

<dd>The purpose of a meter is to signal proportional completion of a task and to

be able to trigger another job which is waiting on this proportional completion

For BNF see <a class="reference internal" href="/wiki/display/ECFLOW/Definition+file+Grammer#grammar-token-meter"><tt class="xref std std-token docutils literal"><span class="pre">meter</span></tt></a></dd>

<dt id="term-node">node</dt>

<dd>A node is a <a class="reference internal" href="#term-suite"><em class="xref std std-term">suite</em></a>, <a class="reference internal" href="#term-family"><em class="xref std std-term">family</em></a> or <a class="reference internal" href="#term-task"><em class="xref std std-term">task</em></a></dd>

<dt id="term-pre-processing">pre-processing</dt>

<dd><p class="first">Pre-processing takes place during <a class="reference internal" href="#term-job-creation"><em class="xref std std-term">job creation</em></a> and acts on <a class="reference internal" href="#term-directives"><em class="xref std std-term">directives</em></a> specified in <a class="reference internal" href="#term-ecf-script"><em class="xref std std-term">ecf script</em></a> file.</p>

<p>This involves:</p>

<blockquote class="last">

<div><p>o expanding any includes file directives.  i.e similar to &#8216;c&#8217; language pre-processing</p>

<p>o removing comments and manual directives</p>

<p>o performing <a class="reference internal" href="#term-variable-substitution"><em class="xref std std-term">variable substitution</em></a></p>

</div></blockquote>

</dd>

<dt id="term-queued">queued</dt>

<dd><p class="first">Is a <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> <a class="reference internal" href="#term-status"><em class="xref std std-term">status</em></a>.</p>

<p class="last">After the begin command, the task <strong>without</strong> a <a class="reference internal" href="#term-defstatus"><em class="xref std std-term">defstatus</em></a> are placed into the queued state</p>

</dd>

<dt id="term-repeat">repeat</dt>

<dd><p class="first">Repeats provide looping functionality. There can only be a single repeat on a <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a>.</p>

<blockquote>

<div><p>repeat day step [ENDDATE]                       # only for suites</p>

<p>repeat integer VARIABLE start end [step]</p>

<p>repeat enumerated VARIABLE first [second [third ...]]</p>

<p>repeat string VARIABLE str1 [str2 ...]</p>

<p>repeat file VARIABLE filename</p>

<p>repeat date VARIABLE yyyymmdd yyyymmdd [delta]</p>

</div></blockquote>

<p class="last">The repeat VARIABLE can be used in <a class="reference internal" href="#term-trigger"><em class="xref std std-term">trigger</em></a> and <a class="reference internal" href="#term-complete-trigger"><em class="xref std std-term">complete trigger</em></a> expressions

For BNF see <a class="reference internal" href="/wiki/display/ECFLOW/Definition+file+Grammer#grammar-token-repeat"><tt class="xref std std-token docutils literal"><span class="pre">repeat</span></tt></a></p>

</dd>

<dt id="term-running">running</dt>

<dd><p class="first">Is a <a class="reference internal" href="#term-ecf-server"><em class="xref std std-term">ecf_server</em></a> state.</p>

<p>The following tables reflects the server capabilities in the different states</p>

<table border="1" class="last docutils">

<colgroup>

<col width="22%" />

<col width="16%" />

<col width="16%" />

<col width="19%" />

<col width="26%" />

</colgroup>

<thead valign="bottom">

<tr><th class="head">State</th>

<th class="head">User Request</th>

<th class="head">Task Request</th>

<th class="head">Job Scheduling</th>

<th class="head">Auto-Check-pointing</th>

</tr>

</thead>

<tbody valign="top">

<tr><td><a class="reference internal" href="#term-running"><em class="xref std std-term">running</em></a></td>

<td>yes</td>

<td>yes</td>

<td>yes</td>

<td>yes</td>

</tr>

<tr><td><a class="reference internal" href="#term-shutdown"><em class="xref std std-term">shutdown</em></a></td>

<td>yes</td>

<td>yes</td>

<td>no</td>

<td>yes</td>

</tr>

<tr><td><a class="reference internal" href="#term-halted"><em class="xref std std-term">halted</em></a></td>

<td>yes</td>

<td>no</td>

<td>no</td>

<td>no</td>

</tr>

</tbody>

</table>

</dd>

<dt id="term-scheduling">scheduling</dt>

<dd><p class="first">The <a class="reference internal" href="#term-ecf-server"><em class="xref std std-term">ecf_server</em></a> is responsible for <a class="reference internal" href="#term-task"><em class="xref std std-term">task</em></a> scheduling.</p>

<p class="last">It will check <a class="reference internal" href="#term-dependencies"><em class="xref std std-term">dependencies</em></a> in the <a class="reference internal" href="#term-suite-definition"><em class="xref std std-term">suite definition</em></a> every minute.

If these <a class="reference internal" href="#term-dependencies"><em class="xref std std-term">dependencies</em></a> are free, the <a class="reference internal" href="#term-ecf-server"><em class="xref std std-term">ecf_server</em></a> will submit the task.

See <a class="reference internal" href="#term-job-creation"><em class="xref std std-term">job creation</em></a>.</p>

</dd>

<dt id="term-shutdown">shutdown</dt>

<dd><p class="first">Is a <a class="reference internal" href="#term-ecf-server"><em class="xref std std-term">ecf_server</em></a> state.</p>

<p>The following tables reflects the server capabilities in the different states</p>

<table border="1" class="last docutils">

<colgroup>

<col width="22%" />

<col width="16%" />

<col width="16%" />

<col width="19%" />

<col width="26%" />

</colgroup>

<thead valign="bottom">

<tr><th class="head">State</th>

<th class="head">User Request</th>

<th class="head">Task Request</th>

<th class="head">Job Scheduling</th>

<th class="head">Auto-Check-pointing</th>

</tr>

</thead>

<tbody valign="top">

<tr><td><a class="reference internal" href="#term-running"><em class="xref std std-term">running</em></a></td>

<td>yes</td>

<td>yes</td>

<td>yes</td>

<td>yes</td>

</tr>

<tr><td><a class="reference internal" href="#term-shutdown"><em class="xref std std-term">shutdown</em></a></td>

<td>yes</td>

<td>yes</td>

<td>no</td>

<td>yes</td>

</tr>

<tr><td><a class="reference internal" href="#term-halted"><em class="xref std std-term">halted</em></a></td>

<td>yes</td>

<td>no</td>

<td>no</td>

<td>no</td>

</tr>

</tbody>

</table>

</dd>

<dt id="term-status">status</dt>

<dd><p class="first">Each <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> in <a class="reference internal" href="#term-suite-definition"><em class="xref std std-term">suite definition</em></a> has a status.</p>

<p>Status reflects the state of the <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a>.

In <a class="reference internal" href="#term-ecflowview"><em class="xref std std-term">ecFlowview</em></a> the background colour of the text reflects the status.</p>

<p><a class="reference internal" href="#term-task"><em class="xref std std-term">task</em></a> status are: <a class="reference internal" href="#term-unknown"><em class="xref std std-term">unknown</em></a>, <a class="reference internal" href="#term-queued"><em class="xref std std-term">queued</em></a>, <a class="reference internal" href="#term-submitted"><em class="xref std std-term">submitted</em></a>, <a class="reference internal" href="#term-active"><em class="xref std std-term">active</em></a>, <a class="reference internal" href="#term-complete"><em class="xref std std-term">complete</em></a>, <a class="reference internal" href="#term-aborted"><em class="xref std std-term">aborted</em></a> and <a class="reference internal" href="#term-suspended"><em class="xref std std-term">suspended</em></a></p>

<p class="last"><a class="reference internal" href="#term-ecf-server"><em class="xref std std-term">ecf_server</em></a> status are: <a class="reference internal" href="#term-shutdown"><em class="xref std std-term">shutdown</em></a>, <a class="reference internal" href="#term-halted"><em class="xref std std-term">halted</em></a>, <a class="reference internal" href="#term-running"><em class="xref std std-term">running</em></a>

this is shown on the root node in <a class="reference internal" href="#term-ecflowview"><em class="xref std std-term">ecFlowview</em></a></p>

</dd>

<dt id="term-submitted">submitted</dt>

<dd><p class="first">Is a <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> <a class="reference internal" href="#term-status"><em class="xref std std-term">status</em></a>.</p>

<p class="last">When the <a class="reference internal" href="#term-task"><em class="xref std std-term">task</em></a> <a class="reference internal" href="#term-dependencies"><em class="xref std std-term">dependencies</em></a> are resolved/free the <a class="reference internal" href="#term-ecf-server"><em class="xref std std-term">ecf_server</em></a> places the task into a submitted state.

However if the ECF_JOB_CMD fails, the task is placed into the <a class="reference internal" href="#term-aborted"><em class="xref std std-term">aborted</em></a> state</p>

</dd>

<dt id="term-suite">suite</dt>

<dd><p class="first">Is a <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> in a <a class="reference internal" href="#term-suite-definition"><em class="xref std std-term">suite definition</em></a></p>

<p class="last">A suite is a collection of <a class="reference internal" href="#term-family"><em class="xref std std-term">family</em></a>&#8216;s, <a class="reference internal" href="#term-variable"><em class="xref std std-term">variable</em></a>&#8216;s, <a class="reference internal" href="#term-repeat"><em class="xref std std-term">repeat</em></a> and  <a class="reference internal" href="#term-clock"><em class="xref std std-term">clock</em></a> definitions.

For a complete list of attributes look at BNF for <a class="reference internal" href="/wiki/display/ECFLOW/Definition+file+Grammer#grammar-token-suite"><tt class="xref std std-token docutils literal"><span class="pre">suite</span></tt></a></p>

</dd>

<dt id="term-suite-definition">suite definition</dt>

<dd><p class="first">The suite definition is the hierarchical <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> tree.</p>

<p>It describes how your <a class="reference internal" href="#term-task"><em class="xref std std-term">task</em></a>&#8216;s run and interact.</p>

<p>It can built up using</p>

<blockquote>

<div><ul>

<li><p class="first">Ascii text file by following the rules defined in the ecFlow <a class="reference internal" href="/wiki/display/ECFLOW/Definition+file+Grammer#grammer"><em>Definition file Grammer</em></a>.</p>

<p>Hence any language can be used, to generate this format.</p>

</li>

<li><p class="first"><a class="reference internal" href="/wiki/display/ECFLOW/ecFlow+Python+Api#python-api"><em>ecFlow Python Api</em></a></p>

</li>

</ul>

</div></blockquote>

<p class="last">Once the definition is built, it is loaded into the <a class="reference internal" href="#term-ecf-server"><em class="xref std std-term">ecf_server</em></a>, and started.

It is then monitored by <a class="reference internal" href="#term-ecflowview"><em class="xref std std-term">ecFlowview</em></a></p>

</dd>

<dt id="term-suspended">suspended</dt>

<dd><p class="first">Is a <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> state. A <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> can be placed into the suspended state via a <a class="reference internal" href="#term-defstatus"><em class="xref std std-term">defstatus</em></a> or via <a class="reference internal" href="#term-ecflowview"><em class="xref std std-term">ecFlowview</em></a></p>

<p class="last">A suspended <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> including any of its children can not take part in <a class="reference internal" href="#term-scheduling"><em class="xref std std-term">scheduling</em></a> until

the node is resumed.</p>

</dd>

<dt id="term-task">task</dt>

<dd><p class="first">Is a <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> in a <a class="reference internal" href="#term-suite-definition"><em class="xref std std-term">suite definition</em></a>, that represents a job that needs to be carried out.</p>

<p>Only tasks can be submitted.</p>

<p class="last">A job inside a task <a class="reference internal" href="#term-ecf-script"><em class="xref std std-term">ecf script</em></a> should generally be re-entrant

so that no harm is done by rerunning it, since a task may be automatically

submitted more than once if it aborts

For BNF see <a class="reference internal" href="/wiki/display/ECFLOW/Definition+file+Grammer#grammar-token-task"><tt class="xref std std-token docutils literal"><span class="pre">task</span></tt></a></p>

</dd>

<dt id="term-time">time</dt>

<dd><p class="first">This defines a time dependency for a node.</p>

<p class="last">Time is expressed in the format [h]h:mm.

Only numeric values are allowed. There can be multiple time dependencies for a node,

but overlapping times may cause unexpected results.

To define a series of times, specify the start time, end time and a time increment.

If the start time begins with &#8216;+&#8217;, times are relative to the beginning of the suite or,

in repeated families, relative to the beginning of the repeated family.

For BNF see <a class="reference internal" href="/wiki/display/ECFLOW/Definition+file+Grammer#grammar-token-time"><tt class="xref std std-token docutils literal"><span class="pre">time</span></tt></a></p>

</dd>

<dt id="term-today">today</dt>

<dd><p class="first">Like <a class="reference internal" href="#term-time"><em class="xref std std-term">time</em></a>, but &#8220;today&#8221; does not wrap to tomorrow.</p>

<p class="last">If suites&#8217; begin time is past the time given for the &#8220;today&#8221; command the node is free

to run (as far as the time dependency is concern.)

For BNF see <a class="reference internal" href="/wiki/display/ECFLOW/Definition+file+Grammer#grammar-token-today"><tt class="xref std std-token docutils literal"><span class="pre">today</span></tt></a></p>

</dd>

<dt id="term-trigger">trigger</dt>

<dd><p class="first">Triggers defines a dependency for a task or family.</p>

<p class="last">There can be only one trigger dependency per node,

but that can be a complex boolean expression of the status of several nodes.

Triggers should be avoided on suites.

A node with a trigger can only be activated when its trigger has expired.

A trigger holds the node as long as the trigger&#8217;s expression evaluation returns false.</p>

</dd>

<dt id="term-unknown">unknown</dt>

<dd><p class="first">Is a <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> <a class="reference internal" href="#term-status"><em class="xref std std-term">status</em></a>.</p>

<p class="last">This is the default <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> <a class="reference internal" href="#term-status"><em class="xref std std-term">status</em></a> when a <a class="reference internal" href="#term-suite-definition"><em class="xref std std-term">suite definition</em></a> is loaded into the <a class="reference internal" href="#term-ecf-server"><em class="xref std std-term">ecf_server</em></a></p>

</dd>

<dt id="term-variable">variable</dt>

<dd><p class="first">ECF makes heavy use of different kinds of variables.There are several kinds of variables:</p>

<blockquote>

<div><p>Environment variables: which are set in the UNIX shell before the <a class="reference internal" href="#term-ecflow"><em class="xref std std-term">ecFlow</em></a> starts.

These control <a class="reference internal" href="#term-ecf-server"><em class="xref std std-term">ecf_server</em></a>, and <a class="reference internal" href="#term-ecf-client"><em class="xref std std-term">ecf_client</em></a>  .</p>

<p>suite definition variables: Also referred to as user variables. These control <a class="reference internal" href="#term-ecf-server"><em class="xref std std-term">ecf_server</em></a>, and <a class="reference internal" href="#term-ecf-client"><em class="xref std std-term">ecf_client</em></a> and

are available for use in <a class="reference internal" href="#term-job-file"><em class="xref std std-term">job file</em></a>.</p>

<p>Generated variables: These are generated within the suite definition node tree during <a class="reference internal" href="#term-job-creation"><em class="xref std std-term">job creation</em></a>

and are available for use in the <a class="reference internal" href="#term-job-file"><em class="xref std std-term">job file</em></a>.</p>

</div></blockquote>

<p class="last">For BNF see <a class="reference internal" href="/wiki/display/ECFLOW/Definition+file+Grammer#grammar-token-variable"><tt class="xref std std-token docutils literal"><span class="pre">variable</span></tt></a></p>

</dd>

<dt id="term-variable-inheritance">variable inheritance</dt>

<dd><p class="first">When a <a class="reference internal" href="#term-variable"><em class="xref std std-term">variable</em></a> is needed at <a class="reference internal" href="#term-job-creation"><em class="xref std std-term">job creation</em></a> time, it is first sought in the <a class="reference internal" href="#term-task"><em class="xref std std-term">task</em></a> itself.</p>

<p>If it is not found in the <a class="reference internal" href="#term-task"><em class="xref std std-term">task</em></a>, it is sought from the task&#8217;s parent and so on, up through

the <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> levels until found.</p>

<p>For any <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a>, there are two places to look for variables.</p>

<p class="last">Suite definition variables are looked for first, and then any generated variables.</p>

</dd>

<dt id="term-variable-substitution">variable substitution</dt>

<dd><p class="first">Takes place during <a class="reference internal" href="#term-pre-processing"><em class="xref std std-term">pre-processing</em></a></p>

<p>It involves searching each line of <a class="reference internal" href="#term-ecf-script"><em class="xref std std-term">ecf script</em></a> file, for ECF_MICRO character. typically &#8216;%&#8217;</p>

<p>The text between two % character, defines a variable. i.e %VAR%</p>

<p>This variable is searched for in the <a class="reference internal" href="#term-suite-definition"><em class="xref std std-term">suite definition</em></a>.</p>

<p>First the suite definition variables( sometimes referred to as user variables) are searched

and then the generated variables.</p>

<p>The value of the <a class="reference internal" href="#term-variable"><em class="xref std std-term">variable</em></a> is replaced between the % characters.</p>

<p>If the variable is not found in the <a class="reference internal" href="#term-suite-definition"><em class="xref std std-term">suite definition</em></a> during pre-processing

then <a class="reference internal" href="#term-job-creation"><em class="xref std std-term">job creation</em></a> fails, and an error message is written to the log file, and

the task is placed into the <a class="reference internal" href="#term-aborted"><em class="xref std std-term">aborted</em></a> state.</p>

<p>To avoid this variables in the <a class="reference internal" href="#term-ecf-script"><em class="xref std std-term">ecf script</em></a> can be defined as:</p>

<p class="last">%VAR:replacement% : This is similar to %VAR% but if VAR is not found in

the <a class="reference internal" href="#term-suite-definition"><em class="xref std std-term">suite definition</em></a> then &#8216;replacement&#8217; is used.</p>

</dd>

</dl>

</div>