ryan
|
bdca8b59e0
|
feat: 添加 Operation 查询功能及完整测试
主要功能:
- 新增 OperationQueryRequest/OperationQueryResult 结构体
- 实现 Repository.Query() - 支持多条件筛选、分页、排序
- 实现 Repository.Count() - 统计记录数
- 新增 PersistenceClient.QueryOperations/CountOperations/GetOperationByID
查询功能:
- 支持按 OpID、OpSource、OpType、Doid 等字段筛选
- 支持模糊查询(Doid、DoPrefix)
- 支持时间范围查询(TimeFrom/TimeTo)
- 支持 IP 地址筛选(ClientIP、ServerIP)
- 支持按 TrustlogStatus 筛选
- 支持组合查询
- 支持分页(PageSize、PageNumber)
- 支持排序(OrderBy、OrderDesc)
测试覆盖:
- ✅ query_test.go - 查询功能单元测试
- ✅ pg_query_integration_test.go - PostgreSQL 集成测试(16个测试用例)
* Query all records
* Filter by OpSource/OpType/Status/Actor/Producer/IP
* DOID 模糊查询
* 时间范围查询
* 分页测试
* 排序测试(升序/降序)
* 组合查询
* Count 统计
* PersistenceClient 接口测试
修复:
- 修复 TestClusterSafety_MultipleCursorWorkers - 添加缺失字段
- 修复 TestCursorInitialization - 确保 schema 最新
- 添加自动 schema 更新(ALTER TABLE IF NOT EXISTS)
测试结果:
- ✅ 所有单元测试通过(100%)
- ✅ 所有集成测试通过(PostgreSQL、Pulsar、E2E)
- ✅ Query 功能测试通过(16个测试用例)
|
2025-12-24 17:20:09 +08:00 |
|
ryan
|
a90d853a6e
|
refactor: 将 OpType 字段从枚举类型改为 string 类型
主要变更:
- Operation.OpType: Type → string
- NewFullOperation 参数: opType Type → opType string
- IsValidOpType 参数: opType Type → opType string
- operationMeta.OpType: *Type → *string
- queryclient.ListRequest.OpType: model.Type → string
优点:
- 更灵活,支持动态扩展操作类型
- 不再受限于预定义的枚举常量
- 简化类型转换逻辑
兼容性:
- Type 常量定义保持不变 (OpTypeCreate, OpTypeUpdate 等)
- 使用时需要 string() 转换: string(model.OpTypeCreate)
- 所有单元测试已更新并通过 (100%)
测试结果:
✅ api/adapter - PASS
✅ api/highclient - PASS
✅ api/logger - PASS
✅ api/model - PASS
✅ api/persistence - PASS
✅ api/queryclient - PASS
✅ internal/* - PASS
|
2025-12-24 16:48:00 +08:00 |
|
ryan
|
4b72a37120
|
feat: 完善数据库持久化与存证功能
主要更新:
1. 数据库持久化功能
- 支持三种策略:仅落库、既落库又存证、仅存证
- 实现 Cursor Worker 异步扫描和存证机制
- 实现 Retry Worker 失败重试机制
- 支持 PostgreSQL、MySQL、SQLite 等多种数据库
- 添加 ClientIP 和 ServerIP 字段(可空,仅落库)
2. 集群并发安全
- 使用 SELECT FOR UPDATE SKIP LOCKED 防止重复处理
- 实现 CAS (Compare-And-Set) 原子状态更新
- 添加 updated_at 字段支持并发控制
3. Cursor 初始化优化
- 自动基于历史数据初始化 cursor
- 确保不遗漏任何历史记录
- 修复 UPSERT 逻辑
4. 测试完善
- 添加 E2E 集成测试(含 Pulsar 消费者验证)
- 添加 PostgreSQL 集成测试
- 添加 Pulsar 集成测试
- 添加集群并发安全测试
- 添加 Cursor 初始化验证测试
- 补充大量单元测试,提升覆盖率
5. 工具脚本
- 添加数据库迁移脚本
- 添加 Cursor 状态检查工具
- 添加 Cursor 初始化工具
- 添加 Pulsar 消息验证工具
6. 文档清理
- 删除冗余文档,只保留根目录 README
测试结果:
- 所有 E2E 测试通过(100%)
- 数据库持久化与异步存证流程验证通过
- 集群环境下的并发安全性验证通过
- Cursor 自动初始化和历史数据处理验证通过
|
2025-12-24 15:31:11 +08:00 |
|
ryan
|
88f80ffa5e
|
feat: 新增数据库持久化模块(Persistence),实现 Cursor + Retry 双层架构
## 核心功能
### 1. 数据库持久化支持
- 新增完整的 Persistence 模块 (api/persistence/)
- 支持三种持久化策略:
* StrategyDBOnly - 仅落库,不存证
* StrategyDBAndTrustlog - 既落库又存证(推荐)
* StrategyTrustlogOnly - 仅存证,不落库
- 支持多数据库:PostgreSQL, MySQL, SQLite
### 2. Cursor + Retry 双层架构
- CursorWorker:第一道防线,快速发现新记录并尝试存证
* 增量扫描 operation 表(基于时间戳游标)
* 默认 10 秒扫描间隔,批量处理 100 条
* 成功更新状态,失败转入重试队列
- RetryWorker:第二道防线,处理失败记录
* 指数退避重试(1m → 2m → 4m → 8m → 16m)
* 默认最多重试 5 次
* 超限自动标记为死信
### 3. 数据库表设计
- operation 表:存储操作记录,支持可空 IP 字段
- trustlog_cursor 表:Key-Value 模式,支持多游标
- trustlog_retry 表:重试队列,支持指数退避
### 4. 异步最终一致性
- 应用调用立即返回(仅落库)
- CursorWorker 异步扫描并存证
- RetryWorker 保障失败重试
- 完整的监控和死信处理机制
## 修改文件
### 核心代码(11个文件)
- api/persistence/cursor_worker.go - Cursor 工作器(新增)
- api/persistence/repository.go - 数据仓储层(新增)
- api/persistence/schema.go - 数据库 Schema(新增)
- api/persistence/strategy.go - 策略管理器(新增)
- api/persistence/client.go - 客户端封装(新增)
- api/persistence/retry_worker.go - Retry 工作器(新增)
- api/persistence/config.go - 配置管理(新增)
### 修复内部包引用(5个文件)
- api/adapter/publisher.go - 修复 internal 包引用
- api/adapter/subscriber.go - 修复 internal 包引用
- api/model/envelope.go - 修复 internal 包引用
- api/model/operation.go - 修复 internal 包引用
- api/model/record.go - 修复 internal 包引用
### 单元测试(8个文件)
- api/persistence/*_test.go - 完整的单元测试
- 测试覆盖率:28.5%
- 测试通过率:49/49 (100%)
### SQL 脚本(4个文件)
- api/persistence/sql/postgresql.sql - PostgreSQL 建表脚本
- api/persistence/sql/mysql.sql - MySQL 建表脚本
- api/persistence/sql/sqlite.sql - SQLite 建表脚本
- api/persistence/sql/test_data.sql - 测试数据
### 文档(2个文件)
- README.md - 更新主文档,新增 Persistence 使用指南
- api/persistence/README.md - 完整的 Persistence 文档
- api/persistence/sql/README.md - SQL 脚本说明
## 技术亮点
1. **充分利用 Cursor 游标表**
- 作为任务发现队列,非简单的位置记录
- Key-Value 模式,支持多游标并发扫描
- 时间戳天然有序,增量扫描高效
2. **双层保障机制**
- Cursor:正常流程,快速处理
- Retry:异常流程,可靠重试
- 职责分离,监控清晰
3. **可空 IP 字段支持**
- ClientIP 和 ServerIP 使用 *string 类型
- 支持 NULL 值,符合数据库最佳实践
- 使用 sql.NullString 正确处理
4. **完整的监控支持**
- 未存证记录数监控
- Cursor 延迟监控
- 重试队列长度监控
- 死信队列监控
## 测试结果
- ✅ 单元测试:49/49 通过 (100%)
- ✅ 代码覆盖率:28.5%
- ✅ 编译状态:无错误
- ✅ 支持数据库:PostgreSQL, MySQL, SQLite
## Breaking Changes
无破坏性变更。Persistence 模块作为可选功能,不影响现有代码。
## 版本信息
- 版本:v2.1.0
- Go 版本要求:1.21+
- 更新日期:2025-12-23
|
2025-12-23 18:59:43 +08:00 |
|
ryan
|
d313449c5c
|
refactor: 重构trustlog-sdk目录结构到trustlog/go-trustlog
- 将所有trustlog-sdk文件移动到trustlog/go-trustlog/目录
- 更新README中所有import路径从trustlog-sdk改为go-trustlog
- 更新cookiecutter配置文件中的项目名称
- 更新根目录.lefthook.yml以引用新位置的配置
- 添加go.sum文件到版本控制
- 删除过时的示例文件
这次重构与trustlog-server保持一致的目录结构,
为未来支持多语言SDK(Python、Java等)预留空间。
|
2025-12-22 13:37:57 +08:00 |
|