feat: integrate jetstream meta-group placement
This commit is contained in:
17
src/NATS.Server/JetStream/Cluster/AssetPlacementPlanner.cs
Normal file
17
src/NATS.Server/JetStream/Cluster/AssetPlacementPlanner.cs
Normal file
@@ -0,0 +1,17 @@
|
||||
namespace NATS.Server.JetStream.Cluster;
|
||||
|
||||
public sealed class AssetPlacementPlanner
|
||||
{
|
||||
private readonly int _nodes;
|
||||
|
||||
public AssetPlacementPlanner(int nodes)
|
||||
{
|
||||
_nodes = Math.Max(nodes, 1);
|
||||
}
|
||||
|
||||
public IReadOnlyList<int> PlanReplicas(int replicas)
|
||||
{
|
||||
var count = Math.Min(Math.Max(replicas, 1), _nodes);
|
||||
return Enumerable.Range(1, count).ToArray();
|
||||
}
|
||||
}
|
||||
36
src/NATS.Server/JetStream/Cluster/JetStreamMetaGroup.cs
Normal file
36
src/NATS.Server/JetStream/Cluster/JetStreamMetaGroup.cs
Normal file
@@ -0,0 +1,36 @@
|
||||
using System.Collections.Concurrent;
|
||||
using NATS.Server.JetStream.Models;
|
||||
|
||||
namespace NATS.Server.JetStream.Cluster;
|
||||
|
||||
public sealed class JetStreamMetaGroup
|
||||
{
|
||||
private readonly int _nodes;
|
||||
private readonly ConcurrentDictionary<string, byte> _streams = new(StringComparer.Ordinal);
|
||||
|
||||
public JetStreamMetaGroup(int nodes)
|
||||
{
|
||||
_nodes = nodes;
|
||||
}
|
||||
|
||||
public Task ProposeCreateStreamAsync(StreamConfig config, CancellationToken ct)
|
||||
{
|
||||
_streams[config.Name] = 0;
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
public MetaGroupState GetState()
|
||||
{
|
||||
return new MetaGroupState
|
||||
{
|
||||
Streams = _streams.Keys.OrderBy(x => x, StringComparer.Ordinal).ToArray(),
|
||||
ClusterSize = _nodes,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class MetaGroupState
|
||||
{
|
||||
public IReadOnlyList<string> Streams { get; init; } = [];
|
||||
public int ClusterSize { get; init; }
|
||||
}
|
||||
Reference in New Issue
Block a user