diff --git a/src/NATS.Server/NatsOptions.cs b/src/NATS.Server/NatsOptions.cs index 8a9b56d..688a23f 100644 --- a/src/NATS.Server/NatsOptions.cs +++ b/src/NATS.Server/NatsOptions.cs @@ -71,6 +71,21 @@ public sealed class NatsOptions // Profiling (0 = disabled) public int ProfPort { get; set; } + // Extended options for Go parity + public string? ClientAdvertise { get; set; } + public bool TraceVerbose { get; set; } + public int MaxTracedMsgLen { get; set; } + public bool DisableSublistCache { get; set; } + public int ConnectErrorReports { get; set; } = 3600; + public int ReconnectErrorReports { get; set; } = 1; + public bool NoHeaderSupport { get; set; } + public int MaxClosedClients { get; set; } = 10_000; + public bool NoSystemAccount { get; set; } + public string? SystemAccount { get; set; } + + // Tracks which fields were set via CLI flags (for reload precedence) + public HashSet InCmdLine { get; } = []; + // TLS public string? TlsCert { get; set; } public string? TlsKey { get; set; } diff --git a/src/NATS.Server/NatsServer.cs b/src/NATS.Server/NatsServer.cs index 02a0734..e6ac3dd 100644 --- a/src/NATS.Server/NatsServer.cs +++ b/src/NATS.Server/NatsServer.cs @@ -20,7 +20,6 @@ public sealed class NatsServer : IMessageRouter, ISubListAccess, IDisposable private readonly NatsOptions _options; private readonly ConcurrentDictionary _clients = new(); private readonly ConcurrentQueue _closedClients = new(); - private const int MaxClosedClients = 10_000; private readonly ServerInfo _serverInfo; private readonly ILogger _logger; private readonly ILoggerFactory _loggerFactory; @@ -647,7 +646,7 @@ public sealed class NatsServer : IMessageRouter, ISubListAccess, IDisposable }); // Cap closed clients list - while (_closedClients.Count > MaxClosedClients) + while (_closedClients.Count > _options.MaxClosedClients) _closedClients.TryDequeue(out _); var subList = client.Account?.SubList ?? _globalAccount.SubList; diff --git a/tests/NATS.Server.Tests/NatsOptionsTests.cs b/tests/NATS.Server.Tests/NatsOptionsTests.cs index 4e57769..e13d34c 100644 --- a/tests/NATS.Server.Tests/NatsOptionsTests.cs +++ b/tests/NATS.Server.Tests/NatsOptionsTests.cs @@ -14,4 +14,20 @@ public class NatsOptionsTests opts.LogSizeLimit.ShouldBe(0L); opts.Tags.ShouldBeNull(); } + + [Fact] + public void New_fields_have_correct_defaults() + { + var opts = new NatsOptions(); + opts.ClientAdvertise.ShouldBeNull(); + opts.TraceVerbose.ShouldBeFalse(); + opts.MaxTracedMsgLen.ShouldBe(0); + opts.DisableSublistCache.ShouldBeFalse(); + opts.ConnectErrorReports.ShouldBe(3600); + opts.ReconnectErrorReports.ShouldBe(1); + opts.NoHeaderSupport.ShouldBeFalse(); + opts.MaxClosedClients.ShouldBe(10_000); + opts.NoSystemAccount.ShouldBeFalse(); + opts.SystemAccount.ShouldBeNull(); + } }