docs: close residual #3 (R2 merged); register row 47 (CTS-dispose bug, fixed in-flight); correct stale MaxBatchSize story in Component-StoreAndForward (R1 finding)

This commit is contained in:
Joseph Doherty
2026-08-15 04:14:49 -04:00
parent c75c79f8ab
commit 88425f662c
3 changed files with 15 additions and 4 deletions
@@ -113,9 +113,19 @@ Deliberately not fixed in this program — each has a stated reason, not an over
Library suite 199/199 incl. old-peer interop; ScadaBridge Host 490/490 on the bump. Adding an
eleventh table to `ReplicatedTables` on a replicating site now snapshots ONE table instead of
re-streaming all, both directions.
3. **Event batching per proto message.** Individual `AttributeValueChanged`/`AlarmStateChanged`
events still ride one gRPC message each; batching them is a new wire shape (proto + both
client/server), deferred rather than folded into this program's additive-only changes.
3. ~~**Event batching per proto message.**~~ **RESOLVED 2026-08-15 (`9b5cb3dd`+`e6842c10`,
R2).** Additive wire shape, no new RPC: `batching_supported` request flags +
`SiteStreamEvent.batch` (oneof field 4) carrying `SiteStreamEventBatch`. Negotiation is the
proto3 default itself and is LOAD-BEARING — an un-negotiated batch frame would parse as
`EventOneofCase.None` on an old central and vanish silently, so an old central (which cannot
set the flag) never receives one; an old site ignores the flag and keeps per-event frames.
Per-subscriber `SiteStreamEventBatcher` downstream of the relay's bounded channel (framing
only — never delays a lone event; lingers only once a backlog is proven); defaults 100
events / 25 ms, options-validated strictly < 250 ms to pin the load-test latency budget.
Measured worst case P99 25.4 ms; 600 queued events → 6 frames. Skew proven both directions
over real wire bytes. Histogram `scadabridge.site.stream.batch_size` (allowlist-verified).
Does NOT change the burst ceiling of register row 31 (documented). In-flight it also found
and fixed a pre-existing `SiteStreamGrpcServer` bug (register row 47).
4. ~~**Deployments page server-side paging + status counts.**~~ **RESOLVED 2026-08-15
(`35ce1413`, R3).** The Deployments page is database-paged: `QueryDeploymentListPageAsync`
returns one instance-joined page + the filtered total, `GetDeploymentStatusCountsAsync`