fix(app.py): 移除异步任务中的全局 Config 状态覆盖
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), 任务间目录完全隔离 影响范围:并发上传场景下的文件路径安全性
This commit is contained in:
20
.idea/claudeCodeTabState.xml
generated
Normal file
20
.idea/claudeCodeTabState.xml
generated
Normal file
@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ClaudeCodeTabState">
|
||||
<option name="tabSessions">
|
||||
<map>
|
||||
<entry key="0">
|
||||
<value>
|
||||
<TabSessionState>
|
||||
<option name="provider" value="claude" />
|
||||
<option name="sessionId" value="cf5393e7-6de9-4f60-bde3-38759f3d4dba" />
|
||||
<option name="cwd" value="$PROJECT_DIR$" />
|
||||
<option name="model" value="claude-opus-4-8[1m]" />
|
||||
<option name="permissionMode" value="bypassPermissions" />
|
||||
</TabSessionState>
|
||||
</value>
|
||||
</entry>
|
||||
</map>
|
||||
</option>
|
||||
</component>
|
||||
</project>
|
||||
@ -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
|
||||
|
||||
Reference in New Issue
Block a user