6730f12cd6
上一提交(72ea01d)修了 4 条 pingWithTimeout 路径,但行为验证有缺口: 启动 ping 路径仅代码审查、Redis HealthCheck 仅推断、无 App 级端到端。 补齐过程发现并修复了 H-db-1 的真正根因之一: gorm.Open 的 automatic ping(gorm.go:204,!DisableAutomaticPing 且 ConnPool 为 *sql.DB 时调 pinger.Ping() 无超时)在 pingWithTimeout 之前就无限阻塞。 挂起 DB 下 initDB 的 gorm.Open 永久 hang,根本到不了 pingWithTimeout。 修复:initDB/InitDBWithReplicas 的 gormConfig 加 DisableAutomaticPing: true, 框架用 pingWithTimeout(3s)自管启动 ping。 行为闭环测试(3 缺口补齐): - manager_hdb1_internal_test.go:新增 TestInitDBBoundsHungDB_Hdb1 / TestInitDBWithReplicasBoundsHungDB_Hdb1(hungDialector 注入挂起 *sql.DB, 回归启动 master/replica ping 路径有界)。原 3 用例保留。 - redis_hdb1_internal_test.go:startHungRedisListener(accept 不响应模拟挂起 Redis)+ TestRedisHealthCheckBoundsHungRedis_Hdb1,行为验证 HealthCheck 受 client ReadTimeout 3s 约束(不再是推断)。提取 newRedisClient helper 供 Init 与测试共用。 - app_hdb1_test.go:TestAppInitHungDBBounded_Hdb1 App 级端到端--App.Init 挂起 DB 有界失败(~30s 5 次重试,非无限 hang)+ Shutdown 正常退出。 验证:database -race -short green(24.7s,6 个 H-db-1 用例)、root 包 App -race green(33.5s,含端到端)、build/vet 干净。CHANGELOG 更新。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>