Files
Neo-ZQYY/docs/audit/changes/2026-03-06__fix-db-operations-dsn-proxy.md
Neo 14a12342b5 chore(audit): 补追 96 份未入仓审计孤本 — 覆盖 2026-02-26 ~ 2026-04-08
这些审计记录原本堆积在 docs/audit/changes/changes/ 嵌套误产物目录下(由开发机迁移
79d3c2e 前后的不明批量操作产生)。由于同期 .gitignore 屏蔽了 docs/audit/ 全目录,
它们从未入过 git 任何分支 history。删除即永久丢失。

按 docs/specs/audit-gap-recovery/tasks.md 阶段 1 执行,将全部 96 份 D 类孤本
(主目录无同名、git history 亦无记录)复制到 docs/audit/changes/ 主目录入仓。

涵盖主题: P1-P18 全栈集成 / 多模块累积变更 / ETL bug 修复 / 业务日切 /
   召回与任务引擎改造 / 租户管理与审批 / 董事会财务 / 客户与助教详情 /
   DDL 基线合并 / Kiro 到 Claude Code 迁移

阶段 2(B 类内容漂移 1 份)和阶段 4(嵌套目录删除)独立推进。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 06:35:42 +08:00

3.1 KiB
Raw Blame History

变更审计记录:修复 DatabaseOperations 缺少 _dsn 属性导致 DWD 并行装载全部失败

字段
日期 2026-03-06 09:17:16
Prompt-ID P20260306-084752
Session-ID 9381400d
Session 路径 docs/audit/session_logs/2026-03/06/37_e5276b93_082544

操作摘要

修复 DWD 并行装载全部失败的 bug'DatabaseOperations' object has no attribute '_dsn'。在 database/operations.pyDatabaseOperations 类中新增 _dsn_session_connect_timeout 三个 property透传底层 DatabaseConnection 的同名属性,使 DwdLoadTask._process_single_table() 在线程池中能正确获取连接参数创建独立连接。

根因分析

  • DwdLoadTask._process_single_table() 在线程池中为每个线程创建独立 DatabaseConnection,需要访问 self.db._dsnself.db._sessionself.db._connect_timeout
  • self.dbDatabaseOperations(来自 database/operations.py),它是组合模式(持有 _connection 引用),不继承 DatabaseConnection
  • 因此 DatabaseOperations 没有 _dsn 属性,导致所有 40 个 DWD 表的并行装载全部 AttributeError
  • 注意:database/base.py 中有另一个 DatabaseOperations 继承自 DatabaseConnection(有 _dsn),但实际运行时使用的是 database/operations.py 中的版本

触发场景

用户从 admin-web 启动 ETL 任务,任务开始时间 2026/3/6 08:47:52日志中 40 个 DWD 表全部报错:

DWD 并行装载失败dwd.xxxerr='DatabaseOperations' object has no attribute '_dsn'

风险评估

极低风险 — property 只是透传底层 _connection 的已有属性,不改变任何逻辑。

验证

  • getDiagnostics 无问题
  • 334 个单元测试通过3 个 hypothesis deadline/属性测试超时与本次修改无关)

本次对话文件变更

新增文件

  • docs/audit/prompt_logs/prompt_log_20260306_085216.md
  • docs/audit/session_logs/2026-03/06/37_e5276b93_082544/main_12_9381400d.md
  • docs/audit/session_logs/2026-03/06/37_e5276b93_082544/sub_01_9381400d.md
  • docs/prd/specs/P5.2-miniapp-fe-all-pages.md

改动注解

apps/etl/connectors/feiqiu/database/operations.py

  • 变更类型:修改
  • 原始原因DWD 并行装载任务在线程池中创建独立数据库连接时,需要从 self.dbDatabaseOperations 实例)读取 _dsn_session_connect_timeout 属性,但 DatabaseOperations 是组合模式(持有 _connection 引用),不继承 DatabaseConnection,导致 AttributeError
  • 思路分析:采用 property 透传模式,在 DatabaseOperations 上新增三个只读 property直接委托给底层 _connection 对象的同名属性。这是最小侵入性的修复方式——不改变类的继承结构,不影响现有方法,仅补齐缺失的属性访问路径
  • 修改结果DWD 并行装载的 40 个表可以正常在线程池中创建独立连接,不再抛出 AttributeError。影响范围仅限于 DwdLoadTask._process_single_table() 的线程内连接创建路径

DDL/迁移检查

  • 无新增迁移 SQL
  • 无 DDL 基线变更

OpenAPI Spec 同步

  • 无接口变更