HistoryRead paging (#669) follow-ups: reverse capped read, events end-only, Gateway year-9999 bound #675
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Follow-ups from #669 (HistoryRead continuation points).
GoodMoreData.Items 1 and 2 done — merged to master (
8e6ac4b3, review follow-ups7594120a).(EndTime, StartTime]; ties in descending id; direction lives in the cursor (a resumed reverse read continues reverse). NewIHistorianDataSource.SupportsReverseEvents— SqlServer/QuestDB serve reverse natively (ORDER BY time DESC, id DESC); Gateway/Null refuse an explicit reverse read withBadHistoryOperationUnsupportedwithout calling the backend. A guard test fails if any implementation inherits the reverse overload/capability from the interface default.DateTime.MaxValuethrough the Gateway client's protoTimestamp+ FILETIME path and onto the wire (in-process capture server).Live gate (docker-dev, livegate-6) PASS on SqlServer + QuestDB: 28 events incl. a 9-event tie cluster, reverse reads at caps 1/3/4/5 on both centrals — every event exactly once, exact reverse order, ties descending id, resume stays reverse, window bounds correct, end-only backward. Gateway: explicit reverse ⇒
BadHistoryOperationUnsupported.Left open: how the live AVEVA Historian treats a year-9999 end bound — needs the VPN to
wonder-sql-vd03.Live AVEVA leg PASSED (2026-10-12, VPN, local HistorianGateway → wonder-sql-vd03). The year-9999 end bound (
OtOpcUaNodeManagermaps an unset EndTime toDateTime.MaxValue): raw start-only forward reads[18:06:30 .. 9999-12-31T23:59:59.9999999Z]with caps 5/50 (andSysTimeSeccap 3) were accepted in ~200 ms with correct rows (no terminal row at 9999 or at now); eventsReadEvents [2026-10-01, 9999-12-31]returned 1068 events in 1.5 s. Closing — all legs done.The same gate found that reverse / end-only capped raw reads fail on Gateway (a #669 regression) — filed as #686.