From d755367df0f8a1d514f3507fa51e5667fab7fdca Mon Sep 17 00:00:00 2001 From: DXC Date: Fri, 10 Jul 2026 14:48:44 +0800 Subject: [PATCH] =?UTF-8?q?fix(app.py):=20=E7=A7=BB=E9=99=A4=E5=BC=82?= =?UTF-8?q?=E6=AD=A5=E4=BB=BB=E5=8A=A1=E4=B8=AD=E7=9A=84=E5=85=A8=E5=B1=80?= =?UTF-8?q?=20Config=20=E7=8A=B6=E6=80=81=E8=A6=86=E7=9B=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit process_data_async() 函数: - 原代码:调用 Config.update_directories_from_config(config_path) 全局覆盖 Config.UPLOAD_FOLDER 和 Config.OUTPUT_FOLDER 类属性, 然后同步到 app.config 字典 - 问题:多用户并发上传时,任务 A 的 YAML 配置可能覆盖任务 B 正在使用的目录路径, 造成输出文件写入错误目录的竞争条件 - 修复:移除对 Config 类属性的全局覆盖调用,每个任务直接使用 INI 配置的基础目录 + task_id 构建独立的任务目录 (job_upload_dir / job_output_dir), 任务间目录完全隔离 影响范围:并发上传场景下的文件路径安全性 --- .idea/claudeCodeTabState.xml | 20 ++++++++++++++++++++ src/gasflux/app.py | 17 ++++------------- 2 files changed, 24 insertions(+), 13 deletions(-) create mode 100644 .idea/claudeCodeTabState.xml diff --git a/.idea/claudeCodeTabState.xml b/.idea/claudeCodeTabState.xml new file mode 100644 index 0000000..17be61b --- /dev/null +++ b/.idea/claudeCodeTabState.xml @@ -0,0 +1,20 @@ + + + + + + \ No newline at end of file diff --git a/src/gasflux/app.py b/src/gasflux/app.py index 8cb0788..b0ec4b2 100644 --- a/src/gasflux/app.py +++ b/src/gasflux/app.py @@ -397,20 +397,11 @@ def process_data_async(task_id, data_path, config_path, job_output_dir): logger.error(f"Job {task_id}: Failed to load config from {config_path}: {str(e)}") raise - # 根据配置 output_dir 更新目录 - Config.update_directories_from_config(config_path) + # 不再全局覆盖 Config 类属性(避免多用户并发冲突) + # 每个任务使用独立目录,基础路径由 INI 配置决定,task_id 保证隔离 + # Config.update_directories_from_config(config_path) ← 已移除 - # 将更新后的目录同步到 app.config - app.config['UPLOAD_FOLDER'] = Config.UPLOAD_FOLDER - app.config['OUTPUT_FOLDER'] = Config.OUTPUT_FOLDER - - # 任务状态持久化现在仅使用 SQLite - # JSON 持久化已禁用 - # from .shared import set_task_status_file_path, load_task_status_from_file - # set_task_status_file_path(Config.OUTPUT_FOLDER / "task_status.json") - # load_task_status_from_file() - - # 更新任务目录到正确的基于配置的路径下 + # 使用 INI 配置的基础目录 + task_id 构建任务专属路径 from pathlib import Path job_upload_dir = Path(Config.UPLOAD_FOLDER) / task_id job_output_dir = Path(Config.OUTPUT_FOLDER) / task_id