29 lines
2.1 KiB
Markdown
29 lines
2.1 KiB
Markdown
|
|
## 1. Configuration
|
|||
|
|
- [x] 1.1 在 `src/config/config.js` 新增旧/新明细写入开关、目标表名、`room_status` 独立开关配置
|
|||
|
|
- [x] 1.2 在 `src/config/config.example.js` 同步新增对应示例配置
|
|||
|
|
|
|||
|
|
## 2. Database Layer Refactor
|
|||
|
|
- [x] 2.1 抽象通用批量 COPY 写入内核 `_insertEventsToTarget(events, targetConfig)`,支持接收目标表名、列清单、日志前缀等参数
|
|||
|
|
- [x] 2.2 将旧表 `insertHeartbeatEvents()` 迁移为调用通用内核,保证旧逻辑行为不变
|
|||
|
|
- [x] 2.3 新增新表 `heartbeat.heartbeat_events_g4_hot` 的目标配置与列映射
|
|||
|
|
- [x] 2.4 新增双明细独立编排方法 `insertHeartbeatEventsDual(events)`,按配置分别调用旧/新 writer,聚合返回结构化结果
|
|||
|
|
|
|||
|
|
## 3. Processor Flow Adjustment
|
|||
|
|
- [x] 3.1 调整 `HeartbeatProcessor.processBatch()` 调用链:改用 `insertHeartbeatEventsDual()` 替代原 `insertHeartbeatEvents()`
|
|||
|
|
- [x] 3.2 将 `upsertRoomStatus()` 从"依赖旧表成功"改为"独立执行"——无论旧/新明细开关状态如何,只要 `roomStatusEnabled=true` 就始终执行
|
|||
|
|
- [x] 3.3 调整错误表调用:仅将新表 (`g4Hot`) 失败记录送入 `insertHeartbeatEventsErrors()`,旧表失败不写错误表
|
|||
|
|
|
|||
|
|
## 4. Connection & Pause Strategy
|
|||
|
|
- [x] 4.1 重构消费暂停判定:基于"当前启用的 sink 是否全部连接级不可写",而非单一旧表状态
|
|||
|
|
- [x] 4.2 区分连接错误与表级错误,避免新表结构问题误触发全局暂停
|
|||
|
|
|
|||
|
|
## 5. Observability
|
|||
|
|
- [x] 5.1 在 `src/index.js` 启动时输出双写配置摘要(旧/新开关状态、目标表名、`room_status` 开关)
|
|||
|
|
- [x] 5.2 在 `src/stats/statsManager.js` 新增按 sink 维度的统计项(legacy/g4Hot 成功数、失败数、room_status 成功/失败数)
|
|||
|
|
|
|||
|
|
## 6. Testing
|
|||
|
|
- [x] 6.1 补充 `databaseManager` 双写编排单元测试(仅旧、仅新、双开、双关、交叉失败等场景)
|
|||
|
|
- [x] 6.2 补充 `room_status` 独立性断言测试
|
|||
|
|
- [x] 6.3 补充错误表仅接新表失败的断言测试
|
|||
|
|
- [x] 6.4 补充/扩展数据库 smoke 验证脚本,覆盖新表写入、分区、索引验证
|