Fix historian missing-tag latency, paging limits and response contracts #699

Merged
dohertj2 merged 2 commits from fix/historian-653-followups into master 2026-10-13 04:45:02 -04:00
Owner

Historian reads could wait about 30 seconds for an unprovisioned tag, refuse crowded requests that fit below the Gateway ceiling, and spend excess calls locating stopped-tag history. Check the tag catalog before Raw/Processed/AtTime, cache explicit absence for five seconds, spend the final crowding budget, retain reverse-probe density evidence, and reuse aggregate ceiling refusals for 30 seconds before re-probing.

HistoryRead transport outages return BadNoCommunication on every arm. Raw, Modified and AtTime scalar values match the node DataType; conversion failures produce per-sample BadTypeMismatch. Processed values retain aggregate-specific types.

Fixes #653, #695, #696, #697 and #698. #694 remains blocked on historiangw#27.

Live #653 verification through the updated data source: first missing-tag Raw request 228 ms; cached Raw/Count/AtTime 0–2 ms, correct no-data results. The deployed gateway misparses missing GetTagMetadata responses, so the adapter proves absence using a fully drained filtered catalog stream and exact name comparisons. Temporary read-only test keys were revoked. SysTimeSec's Raw control timed out upstream with DeadlineExceeded; the fault was propagated, and healthy-tag live history was not validated in this run. No deployment changes made.

Full final-tree solution: 14,600 passed, 609 skipped, 0 failed across 62 suites. dotnet test ZB.MOM.WW.OtOpcUa.slnx --verbosity quiet, exit 0. Includes 122 passing OPC UA integration tests and 268 passing host integration tests (12 host skips). Environment-gated suites are included in the skip count. Independent final review found no important defects. Evidence: docs/plans/2026-10-13-historian-653-696-results.md and docs/plans/2026-10-13-historian-695-698-results.md.

Historian reads could wait about 30 seconds for an unprovisioned tag, refuse crowded requests that fit below the Gateway ceiling, and spend excess calls locating stopped-tag history. Check the tag catalog before Raw/Processed/AtTime, cache explicit absence for five seconds, spend the final crowding budget, retain reverse-probe density evidence, and reuse aggregate ceiling refusals for 30 seconds before re-probing. HistoryRead transport outages return BadNoCommunication on every arm. Raw, Modified and AtTime scalar values match the node DataType; conversion failures produce per-sample BadTypeMismatch. Processed values retain aggregate-specific types. Fixes #653, #695, #696, #697 and #698. #694 remains blocked on historiangw#27. Live #653 verification through the updated data source: first missing-tag Raw request 228 ms; cached Raw/Count/AtTime 0–2 ms, correct no-data results. The deployed gateway misparses missing GetTagMetadata responses, so the adapter proves absence using a fully drained filtered catalog stream and exact name comparisons. Temporary read-only test keys were revoked. SysTimeSec's Raw control timed out upstream with DeadlineExceeded; the fault was propagated, and healthy-tag live history was not validated in this run. No deployment changes made. Full final-tree solution: 14,600 passed, 609 skipped, 0 failed across 62 suites. `dotnet test ZB.MOM.WW.OtOpcUa.slnx --verbosity quiet`, exit 0. Includes 122 passing OPC UA integration tests and 268 passing host integration tests (12 host skips). Environment-gated suites are included in the skip count. Independent final review found no important defects. Evidence: docs/plans/2026-10-13-historian-653-696-results.md and docs/plans/2026-10-13-historian-695-698-results.md.
dohertj2 added 1 commit 2026-10-13 03:51:24 -04:00
fix(historian): respect gateway ceilings and history value contracts
v2-ci / build (pull_request) Successful in 5m10s
v2-ci / unit-tests (pull_request) Failing after 28m34s
97668d26d3
dohertj2 added 1 commit 2026-10-13 04:32:32 -04:00
fix(historian): fail fast for missing tags and reduce gateway read cost
v2-ci / build (pull_request) Successful in 5m6s
v2-ci / unit-tests (pull_request) Failing after 29m54s
5897764024
dohertj2 changed title from Fix historian ceilings, future AtTime cost, outage statuses and value types to Fix historian missing-tag latency, paging limits and response contracts 2026-10-13 04:33:34 -04:00
dohertj2 merged commit 618d98e822 into master 2026-10-13 04:45:02 -04:00
Author
Owner

Merged PR #699 into master as 618d98e822. The merged tree exactly matches tested 58977640: full solution 14,600 passed, 609 skipped, zero failed across 62 suites. #653 and #695–#698 are closed; #694 remains open for historiangw#27.

Pending findings are now tracked explicitly:

  • lmxopcua#700: deployed OPC UA/live historian verification, after historiangw#29 restores the existing-tag control.
  • lmxopcua#701: optional concurrent cold/expiry cache coverage.
  • historiangw#29: live existing-tag Raw deadline failures.
  • historiangw#30: deploy/verify the existing missing-metadata sentinel fix.
  • historiangw#31: fail on a premature empty native catalog page (source-inspection finding; not reproduced live).
  • historiangw#32: correct API-key rotation flags and verify deployed unknown-ID revoke reporting.

No deployment changes were made. All temporary test keys were independently verified revoked.

Merged PR #699 into master as 618d98e8224ce1989677590094627e924c644c91. The merged tree exactly matches tested 58977640: full solution 14,600 passed, 609 skipped, zero failed across 62 suites. #653 and #695–#698 are closed; #694 remains open for historiangw#27. Pending findings are now tracked explicitly: - lmxopcua#700: deployed OPC UA/live historian verification, after historiangw#29 restores the existing-tag control. - lmxopcua#701: optional concurrent cold/expiry cache coverage. - historiangw#29: live existing-tag Raw deadline failures. - historiangw#30: deploy/verify the existing missing-metadata sentinel fix. - historiangw#31: fail on a premature empty native catalog page (source-inspection finding; not reproduced live). - historiangw#32: correct API-key rotation flags and verify deployed unknown-ID revoke reporting. No deployment changes were made. All temporary test keys were independently verified revoked.
Sign in to join this conversation.