Called by LivePartitionedSeries for each event arriving on a
partition's LiveSource. Updates that partition's per-window
state in one pass, then if the bucket index advances, emits a
synchronised burst of one merged event per known partition at
the new boundary timestamp.
Pipeline stats snapshot — cumulative counters since
construction plus current per-partition state. O(partitions)
because windowSize walks every partition's live deque to
report the max.
partitions: current partition count.eventsObserved: total source events ingested across all
partitions. Never decreases.emissions: total merged output events fired. Each
clock-trigger tick fans out one event per partition. Never
decreases.windowSize: max live deque size across all partitions
right now. Useful for spotting partition skew. Returns 0
when no partitions exist. Note: "across partitions"
here, not "across windows" (per-partition deques are
already shared across all declared windows). See the
LivePartitionedSyncRolling.stats cross-reference
for the same axis-vs-name caveat.windowsCount: number of declared windows. Static after
construction.
Synchronised partitioned fused multi-window rolling. Maintains N windows per partition in one ingest pass over a single shared deque per partition. Driven by a clock trigger; emits a synchronised burst of one merged event per partition per boundary crossing.
Why fused matters here. The gRPC experiment's V6→V7 profile- diff (PR #19) showed that running two separate
LivePartitionedSyncRollinginstances doubled every per-event pond hop in inclusive time (#routeEvent15→29%,ingest12→25%). A single fused rolling does the per-event work once.Output schema is
[time, <byColumn>, ...mergedColumns]— same partition-column auto-injection as the existing single-window partitioned sync rolling. Duplicate output column names across windows are rejected at construction.Single trigger, clock only. Per-window cadence is not supported; cross-partition boundary detection requires a single trigger anyway. Event/count triggers don't make sense for synced cross-partition emission and are not accepted.
Public API: constructed via the
partitionBy('host').rolling( fusedMapping, { trigger })keyed-form overload onLivePartitionedSeries. User code doesn't import this class directly.