feat: integrate jetstream meta-group placement

This commit is contained in:
Joseph Doherty
2026-02-23 06:16:01 -05:00
parent 005600b9b8
commit 23216d0a48
5 changed files with 122 additions and 0 deletions

View File

@@ -1,5 +1,6 @@
using System.Collections.Concurrent;
using NATS.Server.JetStream.Api;
using NATS.Server.JetStream.Cluster;
using NATS.Server.JetStream.MirrorSource;
using NATS.Server.JetStream.Models;
using NATS.Server.JetStream.Publish;
@@ -10,6 +11,7 @@ namespace NATS.Server.JetStream;
public sealed class StreamManager
{
private readonly JetStreamMetaGroup? _metaGroup;
private readonly ConcurrentDictionary<string, StreamHandle> _streams =
new(StringComparer.Ordinal);
private readonly ConcurrentDictionary<string, List<MirrorCoordinator>> _mirrorsByOrigin =
@@ -17,6 +19,11 @@ public sealed class StreamManager
private readonly ConcurrentDictionary<string, List<SourceCoordinator>> _sourcesByOrigin =
new(StringComparer.Ordinal);
public StreamManager(JetStreamMetaGroup? metaGroup = null)
{
_metaGroup = metaGroup;
}
public IReadOnlyCollection<string> StreamNames => _streams.Keys.ToArray();
public JetStreamApiResponse CreateOrUpdate(StreamConfig config)
@@ -30,6 +37,7 @@ public sealed class StreamManager
_ => new StreamHandle(normalized, new MemStore()),
(_, existing) => existing with { Config = normalized });
RebuildReplicationCoordinators();
_metaGroup?.ProposeCreateStreamAsync(normalized, default).GetAwaiter().GetResult();
return BuildStreamInfoResponse(handle);
}