Skip to content

Commit 8621812

Browse files
galvesribeiroledjon-behluli
authored andcommitted
Add missing validation for the NATS stream provider (dotnet#9668)
Add missing validation for the Nats stream provider
1 parent f9eb0c7 commit 8621812

3 files changed

Lines changed: 25 additions & 6 deletions

File tree

src/Orleans.Streaming.NATS/Hosting/NatsStreamConfigurator.cs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,11 @@ public SiloNatsStreamConfigurator(string name, Action<Action<IServiceCollection>
1313
{
1414
this.ConfigureDelegate(services =>
1515
{
16-
services.ConfigureNamedOptionForLogging<NatsOptions>(name)
16+
services
17+
.ConfigureNamedOptionForLogging<NatsOptions>(name)
1718
.ConfigureNamedOptionForLogging<SimpleQueueCacheOptions>(name)
18-
.ConfigureNamedOptionForLogging<HashRingStreamQueueMapperOptions>(name);
19+
.ConfigureNamedOptionForLogging<HashRingStreamQueueMapperOptions>(name)
20+
.AddTransient<IConfigurationValidator>(sp => new NatsStreamOptionsValidator(sp.GetRequiredService<IOptionsMonitor<NatsOptions>>().Get(name), name));
1921
});
2022
}
2123

@@ -48,8 +50,10 @@ public ClusterClientNatsStreamConfigurator(string name, IClientBuilder builder)
4850
builder
4951
.ConfigureServices(services =>
5052
{
51-
services.ConfigureNamedOptionForLogging<NatsOptions>(name)
52-
.ConfigureNamedOptionForLogging<HashRingStreamQueueMapperOptions>(name);
53+
services
54+
.ConfigureNamedOptionForLogging<NatsOptions>(name)
55+
.ConfigureNamedOptionForLogging<HashRingStreamQueueMapperOptions>(name)
56+
.AddTransient<IConfigurationValidator>(sp => new NatsStreamOptionsValidator(sp.GetRequiredService<IOptionsMonitor<NatsOptions>>().Get(name), name));
5357
});
5458
}
5559

@@ -66,4 +70,4 @@ public ClusterClientNatsStreamConfigurator ConfigurePartitioning(
6670
ob.Configure(options => options.TotalQueueCount = numOfparitions));
6771
return this;
6872
}
69-
}
73+
}

src/Orleans.Streaming.NATS/NatsOptions.cs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Text.Json;
2+
using Orleans.Runtime;
23
using NATS.Client.Core;
34

45
namespace Orleans.Streaming.NATS;
@@ -49,5 +50,17 @@ public class NatsOptions
4950
/// <summary>
5051
/// System.Text.Json serializer options to be used by the NATS provider.
5152
/// </summary>
52-
public JsonSerializerOptions JsonSerializerOptions { get; set; } = default!;
53+
public JsonSerializerOptions? JsonSerializerOptions { get; set; }
54+
}
55+
56+
public class NatsStreamOptionsValidator(NatsOptions options, string? name = null) : IConfigurationValidator
57+
{
58+
public void ValidateConfiguration()
59+
{
60+
if (string.IsNullOrWhiteSpace(options.StreamName))
61+
{
62+
throw new OrleansConfigurationException(
63+
$"The {nameof(NatsOptions.StreamName)} is required for the NATS stream provider '{name}'.");
64+
}
65+
}
5366
}

src/Orleans.Streaming.NATS/Providers/NatsConnectionManager.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@ public NatsConnectionManager(string providerName, ILoggerFactory loggerFactory,
3232
this._loggerFactory = loggerFactory;
3333
this._logger = this._loggerFactory.CreateLogger<NatsConnectionManager>();
3434
this._options = options;
35+
this._options.JsonSerializerOptions ??= new();
3536
this._options.JsonSerializerOptions.TypeInfoResolverChain.Add(NatsSerializerContext.Default);
37+
3638
if (this._options.NatsClientOptions is null)
3739
{
3840
this._options.NatsClientOptions = NatsOpts.Default with

0 commit comments

Comments
 (0)