Skip to content
/ ecflow Public

ECMWF's workflow manager

License

Apache-2.0, Apache-2.0 licenses found

Licenses found

Apache-2.0
LICENSE
Apache-2.0
COPYING
Notifications You must be signed in to change notification settings

ecmwf/ecflow

Repository files navigation

ecFlow

ecFlow is a work-flow manager that enables users to run a large number of programs, with dependencies on each other and on time, in a controlled environment. It provides tolerance, for hardware and software failures, combined with good restart capabilities.

ecFlow runs as a server receiving requests from clients. The command line interface, the graphical interface, scripts and the Python API(application interface) are the clients. The server is based on C++/boost ASIO and uses TCP/IP for communication. Multiple servers can be run on the same hardware. ecFlow submits tasks (jobs) and receives acknowledgements from tasks via specific commands embedded in the scripts. The relationship between tasks is stored in ecFlow, and it is able to submit tasks dependent on the status of other tasks and attributes like time.

The command line interface for ecFlow allows the suite definition to be loaded and retrieved from the server. Also it provides a rich set of commands for communication with the server.

The Python API allows the entire suite definition structure to be specified and loaded into the server. A suite is a collection of interrelated tasks. In ecFlow suites are described by a definition file. The Python API also provides functionality for client to server communication. In addition, it allows checking of the suite, testing the defined interrelations between tasks, and other references and limits.

ecFlow comes with a user manual, online tutorial, Python API and reference documentation_.

Code contributions on ECMWF GitHub space should follow the standard fork-based contribution model on GitHub, which ends with opening of a pull request. Any contribution should follow these steps:

  • Fork the develop branch of the targeted package from GitHub to your own GitHub space
  • Clone your fork locally
  • Make the necessary code changes & add and run tests to ensure the new codes works as intended
  • Push changes back to fork on GitHub
  • Create a pull request (PR) back to ECMWF:
    • Describe the motivation of the change and impact on code
    • Accept the ECMWF Contributors License Agreement (CLA - see below for more information)
    • Make sure that all requirements of the PR are addressed
  • As soon as all conditions are fulfilled an ECMWF staff member will review the PR and either merge the request or comment on the PR

Also see License

Any issues with ECMWF software should continue to be reported either by email to Software.Software@ecmwf.int or in the Software Support page at ECMWF.

The issue management system on GitHub should only be used for issues around code contributions to the packages. If in doubt please contact ECMWF Software Support.

Prebuilt binaries are available for most linux distributions.

  • dependencies:

    - GNU C++ (or CLANG) compiler
    - PYTHON_API(optional): python 2.7,  Python 3.0
      If you intend to use ecFlow Python api, You will need to install python.
      The python installation should include the development packages
    - QT5 at least version 5.0.0 is required (optional)
    - cmake
    - Boost C++ libraries
    - Openssl(optional)
    
  • ecfFlow consists of two tar files i.e.

    - boost_1_71_0.tar.gz
    - ecFlow-5.10.0-Source.tar.gz
    
  • Create a directory for the build
    mkdir /tmp/ecflow_build
  • Copy the two tar file into this directory, then change directory to /tmp/ecflow_build

  • Un-zip then un-tar the two files
    tar -zxf boost_1_71_0.tar.gz
    tar -zxf ecFlow-5.10.0-Source.tar.gz
  • You should have two directories created
    - boost_1_71_0
    - ecFlow-5.10.0-Source
  • Create two environment variables. These are used by some of scripts
    export WK=/tmp/ecflow_build/ecFlow-5.10.0-Source
    export BOOST_ROOT=/tmp/ecflow_build/boost_1_71_0
  • ecflow uses bjam/b2 to build BOOST libraries and cmake to build ecflow

  • To maintain compatibility between different releases of ecflow, you should use the same version of boost. If you do not care about this, then any boost version (> 1.68) should suffice. To use an existing boost release please ensure environment variable BOOST_ROOT is set

Use the following step to build boost from scratch:

  • Boost uses bjam for building the boost libraries. bjam source is available in boost, hence we first need to build bjam itself
    cd $BOOST_ROOT
    ./bootstrap.sh

    Now make sure bjam is accessible from $PATH

  • Ecflow uses some of compiled libraries in boost. The following script will build the required lib's, and will configure boost build according to your platform
    cd $BOOST_ROOT
    $WK/build_scripts/boost_build.sh       # compile boost libs used by ecFlow
  • By default will install /usr/local, hence may require root access rights
    cd /tmp/ecflow_build/ecFlow-5.10.0-Source
    mkdir build; cd build
    cmake ..
    make -j2
    make install
    make test
  • Optionally you can specify install prefix directory
    cd /tmp/ecflow_build/ecFlow-5.10.0-Source
    mkdir build; cd build
    cmake .. -DCMAKE_INSTALL_PREFIX=/var/tmp/$USER/install/cmake/ecflow
    make -j2
    make install
  • Optionally if you do NOT want to build the UI(ecflow_ui) or Python api
    cd /tmp/ecflow_build/ecFlow-5.10.0-Source
    mkdir build; cd build
    cmake .. -DCMAKE_INSTALL_PREFIX=/var/tmp/$USER/install/cmake/ecflow \
             -DENABLE_UI=OFF \
             -DENABLE_PYTHON=OFF
    make -j2
    make install
  • Optionally if you did not export BOOST_ROOT you can specify on the command line
    cd /tmp/ecflow_build/ecFlow-5.10.0-Source
    mkdir build; cd build
    cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/apps/ecflow \
             -DCMAKE_BUILD_TYPE=Debug \
             -DBOOST_ROOT=/tmp/ecflow_build/boost_1_71_0
    make -j2
    make install
  • On some platforms(AIX) you may need to specify the c++ compiler
    cd /tmp/ecflow_build/ecFlow-5.10.0-Source
    mkdir build; cd build
    cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/apps/ecflow \
                -DCMAKE_CXX_COMPILER=xlC_r"
    make -j2
    make install
  • To use the python_api, you need to add/change PYTHONPATH and LD_LIBRARY_PATH
    export PYTHONPATH=$PYTHONPATH:$ECFLOW_PYTHON_INSTALL_DIR
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ECFLOW_PYTHON_INSTALL_DIR
  • ecflow uses embedded CEREAL(version 1.3.0) for client/server communication via JSON
  • The ecflow python API can be generated using sphinx. To do this ensure that sphinx-build is available on the path.

  • You have built ecflow using cmake, then please do the following
    cd $WK
    cd Doc/online
    make clean
    make html
  • The documentation can then be viewed using your browser. Just open the file $WK/Doc/online/_build/html/index.html

All open source software packages at ECMWF are distributed under the Apache License 2.0. The standard Apache License was amended to cater for ECMWF special status as an international organisation. For you to be able to contribute any code to our software packages you need to agree that

  • you are happy for your code to be redistributed under Apache License.
  • that your contribution does not violate anyone's IPR rights.

To do so, you and your organisation need to sign a contributors agreement.

Please see: ECMWF Support page

Email contacts: