feat(sessions): add bounded replay ring buffer to SessionEventDistributor
This commit is contained in:
@@ -11,4 +11,20 @@ public sealed class EventOptions
|
||||
/// Gets the backpressure policy for event queue overflow.
|
||||
/// </summary>
|
||||
public EventBackpressurePolicy BackpressurePolicy { get; init; } = EventBackpressurePolicy.FailFast;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the maximum number of events retained in the per-session replay ring buffer
|
||||
/// used to re-deliver events a returning subscriber missed (reconnect/reattach).
|
||||
/// When the buffer exceeds this count the oldest retained events are evicted first.
|
||||
/// A value of <c>0</c> disables replay retention entirely.
|
||||
/// </summary>
|
||||
public int ReplayBufferCapacity { get; init; } = 1024;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the maximum age, in seconds, of an event retained in the per-session replay
|
||||
/// ring buffer. Entries older than this are evicted regardless of capacity. A value
|
||||
/// of <c>0</c> disables age-based eviction (only <see cref="ReplayBufferCapacity"/>
|
||||
/// bounds the buffer).
|
||||
/// </summary>
|
||||
public double ReplayRetentionSeconds { get; init; } = 300;
|
||||
}
|
||||
|
||||
@@ -193,6 +193,16 @@ public sealed class GatewayOptionsValidator : OptionsValidatorBase<GatewayOption
|
||||
{
|
||||
builder.Add("MxGateway:Events:BackpressurePolicy must be a supported backpressure policy.");
|
||||
}
|
||||
|
||||
// ReplayBufferCapacity and ReplayRetentionSeconds are bounds on the replay ring
|
||||
// buffer; 0 is a valid value (disables that dimension), so only negatives fail.
|
||||
AddIfNegative(
|
||||
options.ReplayBufferCapacity,
|
||||
"MxGateway:Events:ReplayBufferCapacity must be greater than or equal to zero.",
|
||||
builder);
|
||||
builder.RequireThat(
|
||||
options.ReplayRetentionSeconds >= 0,
|
||||
"MxGateway:Events:ReplayRetentionSeconds must be greater than or equal to zero.");
|
||||
}
|
||||
|
||||
private static void ValidateDashboard(DashboardOptions options, ValidationBuilder builder)
|
||||
|
||||
Reference in New Issue
Block a user