From b338a91d5db0e1e60ca7ca16c3be28c86c630693 Mon Sep 17 00:00:00 2001 From: Oliver Sanders Date: Fri, 12 Aug 2022 14:30:16 +0100 Subject: [PATCH] scan: update workflow_params to use public db (#4998) * The workflow_params function was using the private DB to list workflow params. * Really it should be using the public DB as only the scheduler process/thread should be accessing the private DB to avoid the potential for DB locking. --- cylc/flow/network/scan.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/cylc/flow/network/scan.py b/cylc/flow/network/scan.py index 12e03ef3f45..201ee4f14fc 100644 --- a/cylc/flow/network/scan.py +++ b/cylc/flow/network/scan.py @@ -67,7 +67,10 @@ ClientTimeout, WorkflowRuntimeClient, ) -from cylc.flow.pathutil import get_cylc_run_dir +from cylc.flow.pathutil import ( + get_cylc_run_dir, + get_workflow_run_dir, +) from cylc.flow.rundb import CylcWorkflowDAO from cylc.flow.workflow_files import ( ContactFileFields, @@ -528,11 +531,16 @@ def _callback(_, entry): key, value = entry params[key] = value - db_file = flow['path'] / SERVICE / 'db' + # NOTE: use the public DB for reading + # (only the scheduler process/thread should access the private database) + db_file = Path(get_workflow_run_dir(flow['name'], 'log', 'db')) if db_file.exists(): dao = CylcWorkflowDAO(db_file, is_public=False) - dao.connect() - dao.select_workflow_params(_callback) - flow['workflow_params'] = params + try: + dao.connect() + dao.select_workflow_params(_callback) + flow['workflow_params'] = params + finally: + dao.close() return flow