From 7af944618410debd1f92f3394de61bf965292ac1 Mon Sep 17 00:00:00 2001 From: Marcos Bento Date: Wed, 5 Feb 2025 15:07:54 +0000 Subject: [PATCH 1/4] Add reference to usage pattern Re ECFLOW-1996 --- docs/ug/cookbook/index.rst | 2 +- .../text_based_suite_definition/dependencies/cron/index.rst | 3 +++ .../text_based_suite_definition/dependencies/date.rst | 2 ++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/ug/cookbook/index.rst b/docs/ug/cookbook/index.rst index dccb92910..bca559728 100644 --- a/docs/ug/cookbook/index.rst +++ b/docs/ug/cookbook/index.rst @@ -12,7 +12,7 @@ This cookbook will provide real examples of using the ecFlow :ref:`python_api`. **Contents** .. toctree:: - :maxdepth: 2 + :maxdepth: 1 intro print_all_states diff --git a/docs/ug/user_manual/text_based_suite_definition/dependencies/cron/index.rst b/docs/ug/user_manual/text_based_suite_definition/dependencies/cron/index.rst index 3124735ab..39c457941 100644 --- a/docs/ug/user_manual/text_based_suite_definition/dependencies/cron/index.rst +++ b/docs/ug/user_manual/text_based_suite_definition/dependencies/cron/index.rst @@ -16,6 +16,9 @@ but one that will be repeated indefinitely. It is **highly discouraged** to create completion :term:`triggers ` on nodes/suites containing :term:`cron` attributes. +Consider combining the cron attribute together with event and complete attributes to avoid the suite never completing +-- see more about this usage pattern :ref:`here `. + If the task aborts, the :term:`ecflow_server` will not schedule it again. A :term:`cron` can be parameterised as follows: diff --git a/docs/ug/user_manual/text_based_suite_definition/dependencies/date.rst b/docs/ug/user_manual/text_based_suite_definition/dependencies/date.rst index 7aa660ad9..d2c9d7739 100644 --- a/docs/ug/user_manual/text_based_suite_definition/dependencies/date.rst +++ b/docs/ug/user_manual/text_based_suite_definition/dependencies/date.rst @@ -20,6 +20,8 @@ expressed with a wildcard \* to mean any valid value. For example, **Extreme care** is advised when creating completion :term:`triggers ` on nodes/suites containing :term:`date` attributes. +Consider combining the date attribute together with event and complete attributes to avoid the suite never completing +-- see more about this usage pattern :ref:`here `. Currently, a range of values cannot be used to specify any of the three numeric fields in a date. See :ref:`text_based_def_day` for a way to specify the first seven days. From 5e848de56ec0c79d778041730cf4346c79fcf1ef Mon Sep 17 00:00:00 2001 From: Marcos Bento Date: Wed, 5 Feb 2025 15:18:46 +0000 Subject: [PATCH 2/4] Update the link to eLearning --- docs/ug/elearning.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/ug/elearning.rst b/docs/ug/elearning.rst index e41f87000..22fb5c9ca 100644 --- a/docs/ug/elearning.rst +++ b/docs/ug/elearning.rst @@ -3,4 +3,4 @@ eLearning ================ -The ecFlow eLearning material is available `here `_. +The ecFlow eLearning material is available `here `_. From 575a63fe821eeca7331fe8f3fd5ddabad3c44b15 Mon Sep 17 00:00:00 2001 From: Marcos Bento Date: Thu, 6 Feb 2025 08:51:48 +0000 Subject: [PATCH 3/4] Correct source code formatting of cfg file options This was changed while investigating the meaning of ECF_CHECK_CMD. Re ECFLOW-2005 --- .../src/ecflow/server/ServerEnvironment.cpp | 80 ++++++------------- 1 file changed, 24 insertions(+), 56 deletions(-) diff --git a/libs/server/src/ecflow/server/ServerEnvironment.cpp b/libs/server/src/ecflow/server/ServerEnvironment.cpp index ea41a6f65..7450e9203 100644 --- a/libs/server/src/ecflow/server/ServerEnvironment.cpp +++ b/libs/server/src/ecflow/server/ServerEnvironment.cpp @@ -546,62 +546,30 @@ void ServerEnvironment::read_config_file(std::string& log_file_name, const std:: // read the environment from the config file. // **** Port *must* be read before log file, and check pt files po::options_description config_file_options("Configuration"); - config_file_options.add_options()( - "ECF_HOME", po::value(&ecfHome_)->default_value("."), "ECF_HOME, the home for all ECF files")( - "ECF_PORT", - po::value(&serverPort_)->default_value(3141), - "The port number. Clients must use same port.")( - "ECF_CHECK", - po::value(&ecf_checkpt_file_)->default_value(Ecf::CHECKPT()), - "Check point file name")( - "ECF_CHECKOLD", - po::value(&ecf_backup_checkpt_file_)->default_value(Ecf::BACKUP_CHECKPT()), - "Backup checkpoint file name")( - "ECF_LOG", po::value(&log_file_name)->default_value(Ecf::LOG_FILE()), "Log file name")( - "ECF_CHECKINTERVAL", - po::value(&checkPtInterval_)->default_value(CheckPt::default_interval()), - "The interval in seconds to save check point file")( - "ECF_INTERVAL", - po::value(&submitJobsInterval_)->default_value(defaultSubmitJobsInterval), - "Check time dependencies and submit any jobs")( - "ECF_CHECKMODE", - po::value(&theCheckMode), - "The check mode, must be one of CHECK_NEVER, CHECK_ON_TIME, CHECK_ALWAYS")( - "ECF_JOB_CMD", - po::value(&ecf_cmd_)->default_value(Ecf::JOB_CMD()), - "Command to be executed to submit a job.")( - "ECF_KILL_CMD", - po::value(&killCmd_)->default_value(Ecf::KILL_CMD()), - "Command to be executed to kill a job.")( - "ECF_STATUS_CMD", - po::value(&statusCmd_)->default_value(Ecf::STATUS_CMD()), - "Command to be obtain the job status from server.")( - "ECF_CHECK_CMD", - po::value(&checkCmd_)->default_value(Ecf::CHECK_CMD()), - "Command to be obtain the job status from client.")( - "ECF_URL_CMD", - po::value(&urlCmd_)->default_value(Ecf::URL_CMD()), - "Command to be obtain url.")( - "ECF_URL_BASE", po::value(&urlBase_)->default_value(Ecf::URL_BASE()), "Defines url base.")( - "ECF_URL", po::value(&url_)->default_value(Ecf::URL()), "The default url.")( - "ECF_MICRODEF", - po::value(&ecf_micro_)->default_value(Ecf::MICRO()), - "Preprocessor character for variable substitution and including files")( - "ECF_LISTS", - po::value(&ecf_white_list_file_)->default_value(Str::WHITE_LIST_FILE()), - "Path name to file the list valid users and their access rights")( - "ECF_PASSWD", - po::value(&ecf_passwd_file_)->default_value(Str::ECF_PASSWD()), - "Path name to passwd file")( - "ECF_CUSTOM_PASSWD", - po::value(&ecf_passwd_custom_file_)->default_value(Str::ECF_CUSTOM_PASSWD()), - "Path name to custom passwd file, for user who don't use login name")( - "ECF_TASK_THRESHOLD", - po::value(&the_task_threshold)->default_value(JobProfiler::task_threshold_default()), - "The defaults thresholds when profiling job generation")( - "ECF_PRUNE_NODE_LOG", - po::value(&ecf_prune_node_log_)->default_value(30), - "Node log, older than 180 days automatically pruned when checkpoint file loaded"); + // clang-format off + config_file_options.add_options() + ("ECF_HOME", po::value(&ecfHome_)->default_value("."), "ECF_HOME, the home for all ECF files") + ("ECF_PORT", po::value(&serverPort_)->default_value(3141), "The port number. Clients must use same port.") + ("ECF_CHECK",po::value(&ecf_checkpt_file_)->default_value(Ecf::CHECKPT()), "Check point file name") + ("ECF_CHECKOLD", po::value(&ecf_backup_checkpt_file_)->default_value(Ecf::BACKUP_CHECKPT()), "Backup checkpoint file name") + ("ECF_LOG", po::value(&log_file_name)->default_value(Ecf::LOG_FILE()), "Log file name") + ("ECF_CHECKINTERVAL", po::value(&checkPtInterval_)->default_value(CheckPt::default_interval()), "The interval in seconds to save check point file") + ("ECF_INTERVAL", po::value(&submitJobsInterval_)->default_value(defaultSubmitJobsInterval), "Check time dependencies and submit any jobs") + ("ECF_CHECKMODE", po::value(&theCheckMode), "The check mode, must be one of CHECK_NEVER, CHECK_ON_TIME, CHECK_ALWAYS") + ("ECF_JOB_CMD", po::value(&ecf_cmd_)->default_value(Ecf::JOB_CMD()), "Command to be executed to submit a job.") + ("ECF_KILL_CMD", po::value(&killCmd_)->default_value(Ecf::KILL_CMD()), "Command to be executed to kill a job.") + ("ECF_STATUS_CMD", po::value(&statusCmd_)->default_value(Ecf::STATUS_CMD()), "Command to be obtain the job status from server.") + ("ECF_CHECK_CMD", po::value(&checkCmd_)->default_value(Ecf::CHECK_CMD()), "Command to be obtain the job status from client.") + ("ECF_URL_CMD", po::value(&urlCmd_)->default_value(Ecf::URL_CMD()), "Command to be obtain url.") + ("ECF_URL_BASE", po::value(&urlBase_)->default_value(Ecf::URL_BASE()), "Defines url base.") + ("ECF_URL", po::value(&url_)->default_value(Ecf::URL()), "The default url.") + ("ECF_MICRODEF", po::value(&ecf_micro_)->default_value(Ecf::MICRO()), "Preprocessor character for variable substitution and including files") + ("ECF_LISTS", po::value(&ecf_white_list_file_)->default_value(Str::WHITE_LIST_FILE()), "Path name to file the list valid users and their access rights") + ("ECF_PASSWD", po::value(&ecf_passwd_file_)->default_value(Str::ECF_PASSWD()), "Path name to passwd file") + ("ECF_CUSTOM_PASSWD", po::value(&ecf_passwd_custom_file_)->default_value(Str::ECF_CUSTOM_PASSWD()), "Path name to custom passwd file, for user who don't use login name") + ("ECF_TASK_THRESHOLD", po::value(&the_task_threshold)->default_value(JobProfiler::task_threshold_default()), "The defaults thresholds when profiling job generation") + ("ECF_PRUNE_NODE_LOG", po::value(&ecf_prune_node_log_)->default_value(30), "Node log, older than 180 days automatically pruned when checkpoint file loaded"); + // clang-format on ifstream ifs(path_to_config_file.c_str()); if (!ifs) { From 38ed6c7d73db15d64d5da501fb9e354a6b37aa79 Mon Sep 17 00:00:00 2001 From: Marcos Bento Date: Thu, 6 Feb 2025 11:12:06 +0000 Subject: [PATCH 4/4] Prepare ecFlow 3.13.7 release --- CMakeLists.txt | 2 +- docs/conf.py | 2 +- docs/release_notes/version_5.13.rst | 24 ++++++++++++++++++++++++ libs/pyext/ecflow/__init__.py | 2 +- 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 08433f691..9e8700fff 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,7 +24,7 @@ endif() find_package( ecbuild 3.4 REQUIRED HINTS ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/../ecbuild /workspace/ecbuild) # Before project() -project( ecflow LANGUAGES CXX VERSION 5.13.6 ) +project( ecflow LANGUAGES CXX VERSION 5.13.7 ) # Important: the project version is used, as generated CMake variables, to filter .../ecflow/core/ecflow_version.h.in diff --git a/docs/conf.py b/docs/conf.py index 71d3c1683..01e6db859 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -93,7 +93,7 @@ def get_ecflow_version(): - version = "5.13.6" + version = "5.13.7" ecflow_version = version.split(".") print("Extracted ecflow version '" + str(ecflow_version)) return ecflow_version diff --git a/docs/release_notes/version_5.13.rst b/docs/release_notes/version_5.13.rst index ab89490bd..79e347f46 100644 --- a/docs/release_notes/version_5.13.rst +++ b/docs/release_notes/version_5.13.rst @@ -6,6 +6,30 @@ Version 5.13 updates .. role:: jiraissue :class: hidden + +Version 5.13.7 +============== + +* `Released `__\ on 2025-02-06 + +General +------- + +- **Improvement** allow requesting explicit execution of ecflow_start.sh :jiraissue:`ECFLOW-1991` +- **Improvement** enable mirror of non-generated inherited variables :jiraissue:`ECFLOW-1999` +- **Fix** replace use of deprecated functions to build with Boost 1.87 :jiraissue:`ECFLOW-1997` + +ecFlow UI +--------- + +- **Fix** correct handling of Repeat DateTime values :jiraissue:`ECFLOW-1993` +- **Fix** correct selection in suite filter after Suite replacement :jiraissue:`ECFLOW-1994` + +Documentation +------------- + +- **Improvement** clarify use of attributes date and cron :jiraissue:`ECFLOW-1996` + Version 5.13.6 ============== diff --git a/libs/pyext/ecflow/__init__.py b/libs/pyext/ecflow/__init__.py index 3e8d0b632..aa22a3e5e 100644 --- a/libs/pyext/ecflow/__init__.py +++ b/libs/pyext/ecflow/__init__.py @@ -15,6 +15,6 @@ The ecFlow python module """ -__version__ = '5.13.6' +__version__ = '5.13.7' # http://stackoverflow.com/questions/13040646/how-do-i-create-documentation-with-pydoc