Time-weighted aggregates (#671) follow-ups: reverse anchoring, Partial bit, integral unit, AggregateConfiguration, CLI list #677
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 #671 (time-weighted Part 13 aggregates) and live gate 2.
BucketPlan.cs:9-10, documented). The SDK'sAggregateCalculator.CreateSliceanchors a reverse read at its later time — only Interpolative follows the SDK rule today. Decide and align.Totalintegral unit — confirm the Gateway's integral unit matches the SQL backends (seconds).AggregateConfigurationis ignored (server defaults always) — support or reject explicitly.Items 1, 2, 4, 5 and the offline part of 3 done — merged to master (
945ec2c0; client list in3067146b).(EndTime, StartTime], buckets anchored at the later time stepping back, the partial bucket is the earliest, each stamped with its later edge, latest-first. ⚠️ Client-visible for reverse reads only; forward reads unchanged. Pinned bySdkAggregateParityTests, which drive the SDK's ownAggregateCalculators in-process (unit + through real SQL on both backends).GatewayTagProvisionernow sendsIntegralDivisor = 1.0(proto3 default was 0).UseServerCapabilitiesDefaults=trueor values equal to the server defaults ⇒ served; anything else ⇒ per-nodeBadAggregateConfigurationRejected(defaults are named constants, tested equal to the SDK's).Live gate (docker-dev, livegate-6) PASS on SqlServer + QuestDB: reverse reads latest-first, later-edge stamps, partial bucket earliest; forward unchanged; Average/Min/Count match an offline calculation; 192 rows compared across backends — identical times/status, values within 7.5e-9. Start-of-data Partial forward only. AggregateConfiguration rejection on all backends.
Found by the parity test and filed separately: #680 (pre-existing forward differences from the SDK) and #679 (Gateway Count/Average mode mapping).
Left open: live check of the AVEVA
Total(Integral) magnitude with a constant sandbox tag — needs the VPN.Live AVEVA leg (2026-10-12, VPN). Integral units with
IntegralDivisor=1: PASS at the AVEVA level — a constant 1 over 1 s integrates to 1 (value·seconds; constant 1 over 20 s ⇒ 20; a 10→20→30 ramp ⇒ 450, the trapezoidal area), the same unit as the SqlServer/QuestDBTotal.End to end through OtOpcUa the Gateway
Totalis currently wrong for an unrelated reason: the gateway sends the aggregate interval 10,000× too large (historiangw#27), and OtOpcUa passes through AVEVA's leading pre-window row / drops Uncertain rows (#685). Those are tracked there; the #677 legs themselves are verified. Closing.