AdminUI Controls panel: a node's snapshot that is already old when the dialog opens is not marked stale for the first 30 s #857

Closed
opened 2026-11-11 08:33:26 -05:00 by dohertj2 · 1 comment
Owner

Seen on the #835–#854 docker-dev gate (#851). Staleness is measured from when THIS AdminUI received the snapshot (local clock, deliberately skew-proof). Snapshots loaded when the dialog opens get ReceivedUtc = now, so with central-2 stopped for 1 m 30 s the reopened panel showed central-2 Healthy at full opacity ("Last success: 1m 30s ago") until 30 s after opening; the per-node dimming and STALE chip then worked. Fix: carry the status store's own receive time into loaded snapshots (it is also local), or seed from the publish time when it is older than the stale window.

Seen on the #835–#854 docker-dev gate (#851). Staleness is measured from when THIS AdminUI received the snapshot (local clock, deliberately skew-proof). Snapshots loaded when the dialog opens get `ReceivedUtc = now`, so with central-2 stopped for 1 m 30 s the reopened panel showed central-2 Healthy at full opacity ("Last success: 1m 30s ago") until 30 s after opening; the per-node dimming and STALE chip then worked. Fix: carry the status store's own receive time into loaded snapshots (it is also local), or seed from the publish time when it is older than the stale window.
dohertj2 added the type:followuppriority:p3 labels 2026-11-11 08:33:26 -05:00
Author
Owner

Fixed (2bd3a6c3). Pushed to master in e857135e. The status store now records its own local receive time per (driver, node) and the Controls panel primes from it (GetAllWithReceiveTime → DriverStatusByNode.Prime), so a node already silent when the dialog opens is stale immediately; still skew-proof (local clock). Live-checked on docker-dev 2026-11-11: central-2 stopped 1 m 50 s, then the dialog opened with central-2 dimmed + STALE at once and central-1 live (21 s); after restarting central-2 both blocks showed live (4 s / 5 s).

Fixed (`2bd3a6c3`). Pushed to master in `e857135e`. The status store now records its own local receive time per (driver, node) and the Controls panel primes from it (`GetAllWithReceiveTime` → `DriverStatusByNode.Prime`), so a node already silent when the dialog opens is stale immediately; still skew-proof (local clock). **Live-checked on docker-dev 2026-11-11:** central-2 stopped 1 m 50 s, then the dialog opened with central-2 dimmed + STALE at once and central-1 live (21 s); after restarting central-2 both blocks showed live (4 s / 5 s).
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: dohertj2/lmxopcua#857