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>