docs: task 12 — apiserver circuit breaker done (2bbe894), recovery gap noted

This commit is contained in:
lei.chen 2026-08-14 05:21:07 +00:00
parent 2bbe894f99
commit 2044dedb2f

View file

@ -89,9 +89,11 @@ spec 声称 36/36 任务完成,但 re-audit(research.md)发现缺陷。来
### component-failover-adoption(14 任务:部分完成,2026-08-14)
- **来源**:`.kiro/specs/component-failover-adoption/`
- **关键结论**:requirements.md Background 明确 "**scheduler 没有任何运行时重连/rejoin 逻辑**——连的 controller 死后,scheduler 无法切换到其他候选"。
- **✅ 已完成并集群验证(commit 2165b1a)**:
- **worker 无限重试**(controller_connector.c `checking_connection`):去掉 5 次上限,无限重试直到重连(连接器线程专用,不阻塞硬件/进程监控线程)。实测:杀 controller 后 3 worker 全部存活并持续重试,controller 回来后自动 rejoin。
- **✅ 已完成并集群验证(commit 2165b1a + 2bbe894)**:
- **worker 无限重试**(controller_connector.c `checking_connection`):去掉 5 次上限,无限重试直到重连(连接器线程专用,不阻塞硬件/进程监控线程)。实测:杀 controller 后 3 worker 全部存活并持续重试,controller 回来后自动 rejoin。**永久故障**:持续重试不放弃(正确);**HA**:`xcecd_join_cluster` 已按 --peers 候选列表迭代(best-effort)。
- **apiserver rejoin**(clib.go `StartHeartbeat` + `xce_backend_rejoin`):心跳从失败转成功时显式 rejoin(HostRole_apiserver),恢复 push 通知。实测:controller 重启后日志 `backend re-joined controller after reconnect`。
- **apiserver fail-fast 电路熔断(Req 4,commit 2bbe894)**:health.go 原子熔断 + `callBackend` 包 4 个写调用。degraded 时立即返回 `backend controller unavailable`,不调 lib;传输错误或 XCE NOMASTER/REDIRECT/NOT_READY/STANDBY 触发熔断;语义错误不触发。实测:杀 controller 后第 2 次提交 ~11ms 返回 fail-fast。7 单测。
- **⚠️ 已知缺口**:**apiserver 心跳恢复在 controller 完整死亡+重启后不总是可靠**——lib transport reconnect 未稳定重建到新 controller(与 scheduler reconnect 同类,task #13)。当前需手动重启 apiserver 恢复(clean rejoin 正常)。
- **❌ scheduler reconnect 被真实 heap corruption 阻塞(未合入,已回退)**:
- scheduler 的 rejoin(`xcecli_set_reconnect_handler` flag + 主循环 `xcecli_join`)**功能上能重连并 rejoin**(实测收到 config push),但 rejoin 后 ~3-8s **崩溃**。
- **诊断(2026-08-14 深入)**:ASAN 报 `bad-free`(释放 60 字节区域偏移 56 处的指针,`...66b8`,分配线程 T4/释放线程 T5,**全栈在 loader**);**debug 非 ASAN 构建同样崩**(`free(): invalid pointer` + core,gdb 显示 malloc_printerr 后栈被破坏)——**真实堆损坏,非 ASAN 假象**。