docs(health): historiangw#87 fixed on main 5de3dd9 (not yet deployed)

Claude-Session: https://claude.ai/code/session_01GT67AEHd2Acv1YPwGfXEoV
This commit is contained in:
Joseph Doherty
2026-11-09 14:09:39 -05:00
parent 9cbe65c844
commit 2fea619da3
2 changed files with 6 additions and 4 deletions
+2 -2
View File
@@ -79,10 +79,10 @@ Checks that can only return **Degraded** (so never cause a 503): OtOpcUa `akka`
which node is active. Same rule as the shared check; only the contract around it differs. Needs a
ScadaBridge issue if the site tier should match central's (registering the shared
`ActiveNodeHealthCheck` with the site role would close both).
- **HistorianGateway session-pool readiness latch — historiangw#87 (open, High/P1).** The
- **HistorianGateway session-pool readiness latch — historiangw#87 (FIXED on main `5de3dd9`, 2026-11-09; deployed boxes still run `d8d890c`).** The
`historian-session-pool` / `historian-event-session-pool` checks go Unhealthy after 3 consecutive factory
failures and reset only on a factory success, which needs an RPC, which a 503-ed pod never receives;
caller cancellation also counts. Unfixed on `4d6a9ad` and on by default. Detail:
caller cancellation also counted. Fixed on main `5de3dd9`: caller cancellation no longer counts and each keepalive tick probes one session while the count is non-zero; still present on deployed builds until historiangw#78 redeploys. Detail:
[current-state/historiangateway](current-state/historiangateway/CURRENT-STATE.md).
- **SPEC text is stale on §2.4.** It names OtOpcUa and MxGateway as `GrpcDependencyHealthCheck` users;
**no app uses it** (HistorianGateway, once cited as a user, now probes the Historian through its
@@ -33,7 +33,9 @@ Files under `src/ZB.MOM.WW.HistorianGateway.Server/Health/`. All tagged `ready`,
| `historian-session-pool` | `SessionPoolHealthCheck("read", …)` | `HistorianSessionPool.Snapshot.ConsecutiveFactoryFailures` | 0 → Healthy; 1–2 → Degraded; ≥ 3 → **Unhealthy** |
| `historian-event-session-pool` | `SessionPoolHealthCheck("event", …)` | same over `HistorianEventSessionPool` | same |
### Open finding: the session-pool check latches Unhealthy — historiangw#87 (open)
### Finding: the session-pool check latched Unhealthy — historiangw#87 (fixed on main `5de3dd9`)
> **Fixed 2026-11-09 on `origin/main` `5de3dd9`** (after this audit's `4d6a9ad`): caller cancellation no longer counts, and while the failure count is non-zero each keepalive tick opens one probe session (success resets it). Deployed boxes still run `d8d890c` until historiangw#78. The analysis below describes the pre-fix code.
historiangw#87 (Server-007, High/P1): `_consecutiveFactoryFailures` is reset only by a **successful
factory call**, and the factory only runs when a real RPC needs a new lease (the keepalive sweep never
@@ -67,6 +69,6 @@ ready-tier results), and the four Historian gRPC services.
| §1 nothing on `live` | ✅ | |
| §2.1 DB probe | 🟡 custom | `SqlConnectionHealthCheck` (no EF context to wrap) |
| §2.4 downstream dependency probe | ✅ (custom) | Historian via the pool, not `GrpcDependencyHealthCheck` |
| Ready = "can this node serve its dependencies?" | 🟡 | correct while dependencies fail; **does not recover** after a session-pool outage (#87) |
| Ready = "can this node serve its dependencies?" | 🟡 | correct while dependencies fail; did not recover after a session-pool outage (#87 — fixed on main `5de3dd9`, not yet deployed) |
| §3 canonical JSON writer | ✅ | |
| §4 `IActiveNodeGate` | n/a | |