Review remediation 2026-10-21: run the Wave-4 integration gates (lanes A–G, H1, drivers) #761

Open
opened 2026-11-09 11:43:14 -05:00 by dohertj2 · 2 comments
Owner

Consolidates the live / fixture / hardware gates left on the 2026-10-21 review-remediation lanes (plan Wave 4, INT-2/INT-3/INT-4). All lane code for A, B, C, D, E, F, G1, G2, H1 and the per-driver lanes is merged on master. No gate run is recorded anywhere: docs/reviews/2026-10-21/gates.md does not exist and no commit records one. The lane issues are closed against this issue. Record each result here, with the date and commit, and in docs/reviews/2026-10-21/gates.md.

docker-dev gates

  • A (#731): a driver config change disposes the old instance, and thread and handle counts stay flat across 20 respawns (dotnet-counters).
  • B (#732): a ScadaBridge-style subscription survives a surgical add, and a re-created item after a rebuild receives data (Client.CLI subscribe).
  • C (#733): kill central-1 mid-dispatch and the next deploy succeeds; with port 4840 taken, /health/ready returns 503.
  • E (#734): a while(true) virtual tag leaves the node responsive, the tag shows as quarantined, and the thread count stays flat over 2 min.
  • D (#745), AdminUI Chrome pass (AdminUI has no bUnit, so this check has to be live):
    • a 100 KB script survives save and reload
    • two-tab /hosts CPU stays flat with 50 drivers
    • a 5k-tag device renders in under 2 s
    • every delete asks for confirmation
    • the A6 diagnostics panel shows real counts

Galaxy userGate

  • F (#735): with a reachable mxaccessgw, 20 config deploys keep mxgateway.sessions.open flat on the gateway metrics endpoint. This is the proof for the review's Critical session leak.

Historian fixture gate

  • H1 (#736): SqlServer/QuestDb year-window read at N=0 returns pages of at most 10k with a continuation point, and the heap stays under 500 MB.

Driver lane gates (from #744)

  • Fixture runs on 10.100.0.35:
    • modbus standard
    • s7 s7_1500
    • abcip controllogix
    • opcuaclient opc-plc
    • mqtt + sparkplug
    • sql
  • Hardware userGates (related follow-ups: #752, #755):
    • AbCip / AbLegacy / TwinCAT array writes
    • FOCAS MACRO: > 32767
    • AbCip probe-typo recovery

Not covered here: lane H2 + B2 (#746) is not on master yet; its gate stays on #746. The C3 ServiceLevel half is #762.

Consolidates the live / fixture / hardware gates left on the 2026-10-21 review-remediation lanes (plan Wave 4, INT-2/INT-3/INT-4). All lane code for A, B, C, D, E, F, G1, G2, H1 and the per-driver lanes is merged on `master`. No gate run is recorded anywhere: `docs/reviews/2026-10-21/gates.md` does not exist and no commit records one. The lane issues are closed against this issue. Record each result here, with the date and commit, and in `docs/reviews/2026-10-21/gates.md`. ### docker-dev gates - [ ] **A (#731):** a driver config change disposes the old instance, and thread and handle counts stay flat across 20 respawns (dotnet-counters). - [ ] **B (#732):** a ScadaBridge-style subscription survives a surgical add, and a re-created item after a rebuild receives data (Client.CLI subscribe). - [ ] **C (#733):** kill central-1 mid-dispatch and the next deploy succeeds; with port 4840 taken, `/health/ready` returns 503. - [ ] **E (#734):** a `while(true)` virtual tag leaves the node responsive, the tag shows as quarantined, and the thread count stays flat over 2 min. - [ ] **D (#745), AdminUI Chrome pass** (AdminUI has no bUnit, so this check has to be live): - a 100 KB script survives save and reload - two-tab `/hosts` CPU stays flat with 50 drivers - a 5k-tag device renders in under 2 s - every delete asks for confirmation - the A6 diagnostics panel shows real counts ### Galaxy userGate - [ ] **F (#735):** with a reachable mxaccessgw, 20 config deploys keep `mxgateway.sessions.open` flat on the gateway metrics endpoint. This is the proof for the review's **Critical** session leak. ### Historian fixture gate - [ ] **H1 (#736):** SqlServer/QuestDb year-window read at N=0 returns pages of at most 10k with a continuation point, and the heap stays under 500 MB. ### Driver lane gates (from #744) - [ ] Fixture runs on 10.100.0.35: - [ ] modbus standard - [ ] s7 s7_1500 - [ ] abcip controllogix - [ ] opcuaclient opc-plc - [ ] mqtt + sparkplug - [ ] sql - [ ] Hardware userGates (related follow-ups: #752, #755): - [ ] AbCip / AbLegacy / TwinCAT array writes - [ ] FOCAS `MACRO:` > 32767 - [ ] AbCip probe-typo recovery Not covered here: lane H2 + B2 (#746) is not on master yet; its gate stays on #746. The C3 ServiceLevel half is #762.
dohertj2 added the priority:p2 label 2026-11-09 11:43:14 -05:00
dohertj2 added the type:test label 2026-11-09 11:44:13 -05:00
Author
Owner

Gates run 2026-11-09 against master 1b9c36f3; full record in docs/reviews/2026-10-21/gates.md (master 7891b3cb).

docker-dev (rig rebuilt from 1b9c36f3)

  • A — PASS. 20 respawns each of the Modbus and OPC UA drivers; every respawn logged a dispose on both centrals. Threads 46→52 and 46→48 with no trend; file handles 714→712 and 717→715.
  • B — PASS. A surgical add (PureAdd, rebuild=False) kept the open subscriptions alive, with one Bad sample under 1 ms. After a rebuild, re-created items got 20/20 good updates.
  • C — PASS. Killed central-1 mid-dispatch: the next deploy sealed 6/6. Killed the coordinator host (central-2): its peer recovered the in-flight deployment. With port 4840 taken, a central's /health/ready returned 503 and a site-only node exited 1.
  • E — PASS. A while(true) virtual tag was quarantined after 20 s; /health/ready stayed at 3–11 ms, read latency was unchanged, threads stayed at 50–54 over 3.5 min. The spinning thread keeps burning a core until restart (the known #750 limit).
  • D (AdminUI Chrome pass): NOT RUN yet.

Driver fixtures (10.100.0.35): all pass.

  • Modbus standard: 12 passed.
  • S7 s7_1500: 23 passed, 3 skipped.
  • AbCip ControlLogix: 33 passed, 22 skipped. One latency-comparison flake, recorded on #769.
  • OpcUaClient opc-plc: 5 passed.
  • MQTT + Sparkplug: 30 passed.
  • Sql: 37 passed. 17 skipped because there's no MySQL or ODBC fixture on the host.

H1 — PASS (backend level). A QuestDb and SqlServer year window at N=0 is refused as a single read, then walks as pages of at most 10k with no loss or duplicates. Peak working set was 122 MB and 114 MB. The continuation point is covered by the offline server tests only.

Not run:

  • D (needs the Chrome pass).
  • F (needs a reachable mxaccessgw).
  • The hardware userGates (#752/#755).
  • Other Modbus profiles, and the destructive S7 tests.

Filed from observations: #783 (a timer-only virtual tag never evaluates), #784 (null failureReason on a deploy timeout, quarantine observability, rig PSK 'REVOKED' warning that contradicts working dispatch). A surgical tag add respawns the whole driver (one Bad sample on every tag) — noted in gates.md as the accepted DriverSpawnPlanner cost.

Keeping open for D, F and the hardware gates.

Gates run 2026-11-09 against master `1b9c36f3`; full record in `docs/reviews/2026-10-21/gates.md` (master `7891b3cb`). **docker-dev (rig rebuilt from 1b9c36f3)** - **A — PASS.** 20 respawns each of the Modbus and OPC UA drivers; every respawn logged a dispose on both centrals. Threads 46→52 and 46→48 with no trend; file handles 714→712 and 717→715. - **B — PASS.** A surgical add (`PureAdd`, rebuild=False) kept the open subscriptions alive, with one Bad sample under 1 ms. After a rebuild, re-created items got 20/20 good updates. - **C — PASS.** Killed central-1 mid-dispatch: the next deploy sealed 6/6. Killed the coordinator host (central-2): its peer recovered the in-flight deployment. With port 4840 taken, a central's /health/ready returned 503 and a site-only node exited 1. - **E — PASS.** A `while(true)` virtual tag was quarantined after 20 s; /health/ready stayed at 3–11 ms, read latency was unchanged, threads stayed at 50–54 over 3.5 min. The spinning thread keeps burning a core until restart (the known #750 limit). - **D (AdminUI Chrome pass):** NOT RUN yet. **Driver fixtures (10.100.0.35):** all pass. - Modbus standard: 12 passed. - S7 s7_1500: 23 passed, 3 skipped. - AbCip ControlLogix: 33 passed, 22 skipped. One latency-comparison flake, recorded on #769. - OpcUaClient opc-plc: 5 passed. - MQTT + Sparkplug: 30 passed. - Sql: 37 passed. 17 skipped because there's no MySQL or ODBC fixture on the host. **H1 — PASS (backend level).** A QuestDb and SqlServer year window at N=0 is refused as a single read, then walks as pages of at most 10k with no loss or duplicates. Peak working set was 122 MB and 114 MB. The continuation point is covered by the offline server tests only. **Not run:** - D (needs the Chrome pass). - F (needs a reachable mxaccessgw). - The hardware userGates (#752/#755). - Other Modbus profiles, and the destructive S7 tests. **Filed from observations:** #783 (a timer-only virtual tag never evaluates), #784 (null failureReason on a deploy timeout, quarantine observability, rig PSK 'REVOKED' warning that contradicts working dispatch). A surgical tag add respawns the whole driver (one Bad sample on every tag) — noted in gates.md as the accepted DriverSpawnPlanner cost. Keeping open for D, F and the hardware gates.
Author
Owner

Gate D (AdminUI live pass, docker-dev) recorded on master 20820bbf in docs/reviews/2026-10-21/gates.md: 4/5 PASS — 100 KB script byte-identical after save+reload; two /hosts tabs leave AdminUI CPU flat (~11% both conditions, 52 drivers); 5k-tag device paints in 44 ms (500/level paging); A6 diagnostics shows the real 52 drivers. FAIL: role-grant, cluster, node and ACL deletes run with no confirmation → #785. Remaining on this issue: gate F (needs mxaccessgw) and the hardware userGates.

Gate D (AdminUI live pass, docker-dev) recorded on master `20820bbf` in docs/reviews/2026-10-21/gates.md: **4/5 PASS** — 100 KB script byte-identical after save+reload; two /hosts tabs leave AdminUI CPU flat (~11% both conditions, 52 drivers); 5k-tag device paints in 44 ms (500/level paging); A6 diagnostics shows the real 52 drivers. **FAIL:** role-grant, cluster, node and ACL deletes run with no confirmation → #785. Remaining on this issue: gate F (needs mxaccessgw) and the hardware userGates.
dohertj2 added the blocked label 2026-11-10 08:43:41 -05:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: dohertj2/lmxopcua#761