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

54 lines
3.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 变更审计记录:修复 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.py``DatabaseOperations` 类中新增 `_dsn``_session``_connect_timeout` 三个 property透传底层 `DatabaseConnection` 的同名属性,使 `DwdLoadTask._process_single_table()` 在线程池中能正确获取连接参数创建独立连接。
## 根因分析
- `DwdLoadTask._process_single_table()` 在线程池中为每个线程创建独立 `DatabaseConnection`,需要访问 `self.db._dsn``self.db._session``self.db._connect_timeout`
- `self.db``DatabaseOperations`(来自 `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.db``DatabaseOperations` 实例)读取 `_dsn``_session``_connect_timeout` 属性,但 `DatabaseOperations` 是组合模式(持有 `_connection` 引用),不继承 `DatabaseConnection`,导致 `AttributeError`
- 思路分析:采用 property 透传模式,在 `DatabaseOperations` 上新增三个只读 property直接委托给底层 `_connection` 对象的同名属性。这是最小侵入性的修复方式——不改变类的继承结构,不影响现有方法,仅补齐缺失的属性访问路径
- 修改结果DWD 并行装载的 40 个表可以正常在线程池中创建独立连接,不再抛出 `AttributeError`。影响范围仅限于 `DwdLoadTask._process_single_table()` 的线程内连接创建路径
## DDL/迁移检查
- 无新增迁移 SQL
- 无 DDL 基线变更
## OpenAPI Spec 同步
- 无接口变更