docs(index): OtOpcUa batch #667-#673 (retention, Part 11 modified values, event CPs, OpcUaClient session loss, time-weighted aggregates, unreachable-Primary capture)

This commit is contained in:
Joseph Doherty
2026-10-11 10:18:36 -04:00
parent c6e60cb6c4
commit 0adfb244b2
@@ -192,3 +192,32 @@ AddRoute of the dev Mac (`oee-tagdump-mac`, `10.181.206.245.1.1`) on the two tes
about 30 s with no historization, because #537 Primary-gated capture waits for Akka downing. It is
backend-independent; clean failovers are gap-free. **ScadaBridge impact: none by default**; the same as SqlServer
when selected.
- **2026-10-11 batch #667–#673 (all closed; OtOpcUa `bc03adb1`).** Four docker-dev live gates passed (one R2 failure
fixed and re-gated). Follow-ups are #674–#678.
- **#667:** opt-in SqlServer retention, `ServerHistorian:SqlServer:RetentionDays`. Old samples and events are purged
in batches. The purge is Primary-gated, with one purger per database via `sp_getapplock`.
- **#668:** Part 11 modified-value history.
- Both SQL backends keep an audit trail of every HistoryUpdate, recording the API-key principal and the prior value.
- SqlServer schema is v2: `hist.SampleModified`, written in the same statement as the change. QuestDB uses an
append-only `sample_modified` table.
- `IsReadModified=true` reads support continuation points. Gateway returns `BadHistoryOperationUnsupported`.
- ⚠️ With `AutoCreateSchema=false`, apply `002_sample_modified.sql` before upgrading, or every historian call
fails.
- **#669:** event HistoryRead now uses continuation points. Open-ended reads follow Part 11: start-only reads
forward, end-only raw reads backward.
- **#670:** OpcUaClient now goes `Degraded` on upstream session loss.
- It publishes one `BadNoCommunication` per tag per outage, and the #527 watchdog does the recovery.
- The SDK `SessionReconnectHandler` is deleted.
- A post-recovery replay guard stops late, older notifications from regressing values.
- **#671:** Part 13 time-weighted aggregates on both SQL backends: TimeAverage, TimeAverage2, Total, Total2 and
Interpolative. ⚠️ `Total` is now the time-weighted integral, no longer `SUM`. A window over
`MaxTimeWeightedRawRows` returns `BadTooManyOperations`.
- **#672:** a standby starts capturing as soon as its recording Primary is unreachable, controlled by
`CaptureWhilePrimaryUnreachable`, default true. The crash-failover gap drops from about 31 s to about 13 s.
- **#673:** FOCAS test flake fixed.
- **ScadaBridge impact:**
- Tags backed by an OpcUaClient driver now go Bad (`BadNoCommunication`, value retained server-side) while their
upstream is lost, where they used to stay Good. This is the quality contract working.
- On SqlServer/QuestDB nodes, `Total` aggregate values change meaning.
- Event HistoryRead may now return continuation points, which a client must follow.
- Otherwise none by default.