perf: add FileStore buffered writes, O(1) state tracking, and eliminate redundant per-publish work
Implement Go-parity background flush loop (coalesce 16KB/8ms) in MsgBlock/FileStore, replace O(n) GetStateAsync with incremental counters, skip PruneExpired/LoadAsync/ PrunePerSubject when not needed, and bypass RAFT for single-replica streams. Fix counter tracking bugs in RemoveMsg/EraseMsg/TTL expiry and ObjectDisposedException races in flush loop disposal. FileStore optimizations verified with 3112/3112 JetStream tests passing; async publish benchmark remains at ~174 msg/s due to E2E protocol path bottleneck.
This commit is contained in:
@@ -25,6 +25,11 @@ public sealed class NatsOptions
|
||||
public TimeSpan PingInterval { get; set; } = NatsProtocol.DefaultPingInterval;
|
||||
public int MaxPingsOut { get; set; } = NatsProtocol.DefaultPingMaxOut;
|
||||
|
||||
// Go: opts.go — DisableShortFirstPing. When true, the first PING timer tick
|
||||
// is not suppressed by the FirstPongSent / 2-second grace period.
|
||||
// Useful in tests to ensure deterministic ping behavior.
|
||||
public bool DisableShortFirstPing { get; set; }
|
||||
|
||||
// Subscription limits
|
||||
public int MaxSubs { get; set; } // 0 = unlimited (per-connection)
|
||||
public int MaxSubTokens { get; set; } // 0 = unlimited
|
||||
|
||||
Reference in New Issue
Block a user