From df0c1f351362d964efeb4c626963f99299a5bd17 Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Mon, 12 Oct 2026 17:55:34 -0400 Subject: [PATCH] docs(historian): #691 bound walk-back cost after the #689 walk (rebase onto 88141d6e) --- docs/Historian.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/Historian.md b/docs/Historian.md index e3799b68..083360ed 100644 --- a/docs/Historian.md +++ b/docs/Historian.md @@ -794,8 +794,9 @@ switch `ServerHistorian:HonorReturnBounds = false` restores the pre-#691 behavio end bound ends the **last**: the pending end bound rides the continuation point, and when a page is exactly full the end bound is the whole next page. Paging a bounded read at any page size concatenates to the unpaged answer. - **How it is served — one authority, `HistoryBounds` in the OPC UA server.** "At or before T" is a newest-first read of `(0, T]` - capped at one — native on SqlServer/QuestDB, the #686 walk-back of bounded forward reads on the Gateway (so a tag with no sample - before StartTime walks back to 1970: the same ~14–16 small reads as a deep reverse page-through). "At or after T" is a forward read + capped at one — native on SqlServer/QuestDB, the #686 walk-back of bounded forward reads on the Gateway (a tag with no sample + before StartTime is proven empty down to 1970 by the #689 walk — after two empty segments it asks once for the whole remainder — + so a missing start bound costs a few small reads, not one per ×4 step). "At or after T" is a forward read of `[T, MaxValue)` capped at one — on the **Gateway** it ends at **now + 1 day** instead (the walk-back's horizon; the HistorianGateway only checks `start ≤ end`, so a year-9999 end would reach AVEVA), and an end bound beyond that horizon is `Bad_BoundNotFound` without a read. SqlServer/QuestDB keep `MaxValue` (they bind it safely and may hold samples further ahead).