docs: deferred-table closure, stale-comment sweep, as-built execution record
This commit is contained in:
@@ -56,9 +56,9 @@ public delegate void SubscriberOverflowHandler(bool isOnlySubscriber, bool isInt
|
||||
/// <see cref="Func{T, TResult}"/> producing an
|
||||
/// <see cref="IAsyncEnumerable{T}"/> of already-mapped public
|
||||
/// <see cref="MxEvent"/>s, given a <see cref="CancellationToken"/>. This is the
|
||||
/// cleanest seam: it can pass
|
||||
/// <c>ct => session.ReadEventsAsync(ct).Select(mapper.MapEvent)</c> (or a
|
||||
/// channel reader's <c>ReadAllAsync</c>), while unit tests pass a plain
|
||||
/// cleanest seam: production passes <c>GatewaySession.MapWorkerEventsAsync</c>,
|
||||
/// which reads the worker event channel and maps each frame in one iterator
|
||||
/// (inlining what used to be a read-then-<c>Select</c> chain), while unit tests pass a plain
|
||||
/// channel reader's <c>ReadAllAsync</c> with no real session. The pump owns the
|
||||
/// single consumption of this enumerable; fan-out happens on the public
|
||||
/// <see cref="MxEvent"/> after mapping, mirroring today's
|
||||
@@ -751,9 +751,9 @@ public sealed class SessionEventDistributor : IAsyncDisposable
|
||||
}
|
||||
|
||||
// Disconnect ONLY this subscriber: it is already out of the fan-out set (removed above),
|
||||
// so complete its channel with the overflow fault. Its gRPC reader's MoveNextAsync then
|
||||
// throws the SessionManagerException, which EventStreamService surfaces to the client
|
||||
// exactly as the pre-epic per-RPC overflow did. The pump and every other subscriber are
|
||||
// so complete its channel with the overflow fault. EventStreamService consumes the channel
|
||||
// directly, so its next WaitToReadAsync throws the SessionManagerException, which it surfaces
|
||||
// to the client exactly as the pre-epic per-RPC overflow did. The pump and every other subscriber are
|
||||
// untouched. This runs even when the handler above threw — the subscriber must never be
|
||||
// left attached with an un-completed channel.
|
||||
subscriber.Channel.Writer.TryComplete(new SessionManagerException(
|
||||
|
||||
@@ -179,7 +179,9 @@ public sealed class WorkerFrameWriter
|
||||
/// remaining events are written, so a batch in flight does not delay a control frame's delivery.
|
||||
/// Every frame's "written and flushed before completion" contract is unchanged. An event batch that
|
||||
/// a control frame cuts into therefore pays one extra flush; an uninterrupted batch still pays
|
||||
/// exactly one.
|
||||
/// exactly one. Mixed passes are not exotic — command replies are Control priority too, so
|
||||
/// sustained command traffic concurrent with event streaming can hit them routinely; the cost
|
||||
/// stays bounded at one extra flush per class transition present in the pass.
|
||||
/// </summary>
|
||||
/// <param name="envelopes">Envelopes to write, in order.</param>
|
||||
/// <param name="priority">Scheduling priority for the whole batch.</param>
|
||||
|
||||
Reference in New Issue
Block a user