From c3dc43a7a023f1856534e43ca4dd9e9e4db74d00 Mon Sep 17 00:00:00 2001 From: Tim Pillinger <26465611+wxtim@users.noreply.github.com> Date: Mon, 15 Jan 2024 10:30:31 +0000 Subject: [PATCH] Don't record satisfied xtriggers in the DB Closes https://github.com/cylc/cylc-flow/issues/5911 --- cylc/flow/workflow_db_mgr.py | 7 +++-- tests/integration/test_workflow_db_mgr.py | 37 +++++++++++++++++++++++ 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/cylc/flow/workflow_db_mgr.py b/cylc/flow/workflow_db_mgr.py index 7d6968b137c..1e58ca6c188 100644 --- a/cylc/flow/workflow_db_mgr.py +++ b/cylc/flow/workflow_db_mgr.py @@ -405,9 +405,10 @@ def put_task_event_timers(self, task_events_mgr): def put_xtriggers(self, sat_xtrig): """Put statements to update external triggers table.""" for sig, res in sat_xtrig.items(): - self.db_inserts_map[self.TABLE_XTRIGGERS].append({ - "signature": sig, - "results": json.dumps(res)}) + if not sig.startswith('wall_clock(trigger_time='): + self.db_inserts_map[self.TABLE_XTRIGGERS].append({ + "signature": sig, + "results": json.dumps(res)}) def put_update_task_state(self, itask): """Update task_states table for current state of itask. diff --git a/tests/integration/test_workflow_db_mgr.py b/tests/integration/test_workflow_db_mgr.py index fa15c9165b0..9e9722caff3 100644 --- a/tests/integration/test_workflow_db_mgr.py +++ b/tests/integration/test_workflow_db_mgr.py @@ -14,6 +14,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . +import asyncio import pytest import sqlite3 @@ -127,3 +128,39 @@ async def test_workflow_param_rapid_toggle( w_params = dict(schd.workflow_db_mgr.pri_dao.select_workflow_params()) assert w_params['is_paused'] == '0' + + +async def test_record_only_non_clock_triggers(flow, run, scheduler): + """Database does not record wall_clock xtriggers. + + https://github.com/cylc/cylc-flow/issues/5911 + """ + id_ = flow({ + "scheduler": { + "allow implicit tasks": True, + 'cycle point format': '%Y' + }, + "scheduling": { + "initial cycle point": "1348", + "xtriggers": { + "another": "xrandom(100)", + "wall_clock": "xrandom(100, _=Not a real wall clock trigger)", + "real_wall_clock": "wall_clock()" + }, + "graph": { + "R1": "@another & @wall_clock & @real_wall_clock => foo" + } + }, + }) + # Run workflow unto completion: + schd = scheduler(id_, paused_start=False) + async with run(schd) as log: + while 'Workflow shutting down - AUTOMATIC' not in log.messages: + await asyncio.sleep(1) + + # Get xtriggers db table: + info = schd.workflow_db_mgr.get_pri_dao().conn.execute( + 'SELECT * FROM xtriggers').fetchall() + + # All xtriggers are xrandom: None are wall_clock: + assert all(i[0].startswith('xrandom') for i in info)