Versions Compared

Key

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


Horizontal Navigation Bar


Button Group

Button Hyperlink
titlePrevious
typestandard
urlhttps://confluence.ecmwf.int/display/ECFLOW/Defining+the+first+task
Button Hyperlink
titleUp
typestandard
urlhttps://confluence.ecmwf.int/display/ECFLOW/Tutorial
Button Hyperlink
titleNext
typestandard
urlhttps://confluence.ecmwf.int/display/ECFLOW/Checking+the+job


In the previous section, we have implemented our first task (the t1.ecf file).

The t1.ecf script needs to be preprocessed to generate the job file.

This pre-processing is done automatically by ecflow_server when the task is about to run.

However, it is possible to check the job creation before the suite definition is loaded into the ecflow_server.


Text

Automated job creation checking is only available with Python.

If the ecflow_server can’t locate the ecf script, please see ecf file location algorithm


Python

The process of job creation can be checked before the suite definition
is loaded into the ecflow_server. The following checks are done:
When the suite definition is large and has many ecf script this checking can save a lot of time.

The following points should be noted about job creation checking:

  • It is independent of the ecflow_server.
    Hence ECF_PORT and ECF_HOST in the job file will have default values.
  • Job files have a .job0 extension, whereas the server will always generate jobs with an extension .job<1-n>, i.e. t1.job1, t1.job2.
    The numbers correspond to ECF_TRYNO which is never zero.
  • By default, the job file is created in the same directory as the ecf script. See ECF_JOB

Checking is done using ecflow.Defs.check_job_creation

Update test.py with:

Code Block
languagepy
title$HOME/course/test.py
import os
from ecflow import Defs,Suite,Task,Edit
   
print("Creating suite definition")
home = os.path.join(os.getenv("HOME"),  "course")
defs = Defs( 
        Suite('test',
            Edit(ECF_HOME=home),
            Task('t1')))
print(defs)

print("

...

Checking job creation: .ecf -

...

> .job0

...

")  

...


print(defs.check_job_creation())

# We can assert, so that we only progress

...

 once 

...

job creation 

...

works

...

# assert len(defs.check_job_creation()) == 0, 

...

"Job generation failed"


Note
It is highly advisable that job creation checking is enabled for all subsequent examples.

What to do

  1. Add job creation checking to $HOME/course/test.py
  2. python3 test.py  |  ./test.py
  3. Examine the job file $HOME/course/test/t1.job0
    In particular note the substitutions made by the ecflow server such as ECF_PORT, ECF_HOST, etc


Horizontal Navigation Bar


Button Group

Button Hyperlink
titlePrevious
typestandard
urlhttps://confluence.ecmwf.int/display/ECFLOW/Defining+the+first+task
Button Hyperlink
titleUp
typestandard
urlhttps://confluence.ecmwf.int/display/ECFLOW/Tutorial
Button Hyperlink
titleNext
typestandard
urlhttps://confluence.ecmwf.int/display/ECFLOW/Understanding+the+client

&quot;</span> </pre></div> </div> <div class="admonition note"> <p class="first admonition-title">Note</p> <p class="last">It is highly advisable that <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-job-creation"><em class="xref std std-term">job creation</em></a> checking is enabled for all subsequent examples.</p> </div> <p><strong>What to do:</strong></p> <ol class="arabic simple"> <li>Add <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-job-creation"><em class="xref std std-term">job creation</em></a> checking.</li> <li>Examine the job file <tt class="file docutils literal"><span class="pre">$HOME/course/test/t1.job0</span></tt></li> </ol> </div> </div>